STM8系列是意法半導(dǎo)體公司生產(chǎn)的8位的單片機(jī)。該型號(hào)單片機(jī)分為STM8A、STM8S、STM8L三個(gè)系列。
STM8芯片特點(diǎn)
內(nèi)核
高級(jí)STM8內(nèi)核,具有3級(jí)流水線的哈佛結(jié)構(gòu)
擴(kuò)展指令集
存儲(chǔ)器
程序存儲(chǔ)器:8K字節(jié)Flash;10K 次擦寫后在55°C環(huán)境下數(shù)據(jù)可保存20年
數(shù)據(jù)存儲(chǔ)器:640 字節(jié)真正的數(shù)據(jù)
EEPROM;可達(dá)30萬次擦寫
RAM:1K字節(jié)
中斷控制器功能:
● 硬件中斷的管理
─ 所有I/O引腳都具有外部中斷能力,每一個(gè)端口都有獨(dú)立的中斷向量以及獨(dú)立的標(biāo)志。
─ 外設(shè)中斷能力
● 軟件中斷的管理(TRAP)
● 具有靈活的優(yōu)先級(jí)和中斷等級(jí)管理,支持可嵌套的或同級(jí)中斷管理:
– 多達(dá)4個(gè)軟件可編程的嵌套等級(jí)
– 最多有32個(gè)中斷向量,其入口地址由硬件固定
– 2 不可屏蔽的事件: RESET, TRAP – 1個(gè)不可屏蔽的最高優(yōu)先級(jí)的硬件中斷
串口接收中斷程序:
;串口接收一個(gè)字符,并將其返回上位機(jī)
BUF EQU 40H
BUZZER EQU P3.4
FLAGR EQU 20H.1
ORG 8000H ; 實(shí)驗(yàn)板開始執(zhí)行的第一條指令所處的地址
LJMP MAIN ; 跳轉(zhuǎn)到主程序
ORG 8023H ;中斷程序入口
LJMP SINT ORG 8100H ; 主程序開始的地址;避開中斷入口地址
MAIN: MOV SP, #0D0H ;設(shè)置堆棧起始地址
CLR FLAGR MOV BUF,#00H MOV SCON,#50H ;設(shè)置串口工作模式1,允許接受控制
MOV PCON,#00H ;SMOD=0
MOV TMOD,#20H ;設(shè)置定時(shí)器1工作模式2
MOV TH1,#0FDH ;置定時(shí)器初值,設(shè)定比特率9600bps
MOV TL1,#0FDH SETB ES ;允許串口中斷
SETB EA
SETB TR1 ;啟動(dòng)定時(shí)器
LOOP1: JNB FLAGR,$ ;等待接收字符
LCALL RING ;接收到字符,響鈴提示
CLR FLAGR AJMP LOOP1
;========================================響鈴
RING: CLR BUZZER
LCALL TMS1
LCALL TMS1
SETB BUZZER
RET
;========================================延時(shí)100ms
TMS1: MOV R6, #0F0H ; 給R6和R7賦初值,在12Hz晶振時(shí)延時(shí)時(shí)間為200(R7循環(huán)次數(shù))× 250(R6循環(huán)次數(shù))×2×1(us)
MOV R7, #0C8H
DELAY02: DJNZ R6, $ ; R6單元減1,非0繼續(xù)執(zhí)行當(dāng)前指令,“$”指當(dāng)前指令地址
DJNZ R7, DELAY02 ; R7減1,非0跳轉(zhuǎn)到標(biāo)號(hào)DELAY01處執(zhí)行
RET
STM8 UART接收中斷程序:
系統(tǒng)功能
使用STM8的USART進(jìn)行自發(fā)自收(將發(fā)送引腳RXD短接到接收引腳TXD),發(fā)出數(shù)據(jù):0,1,2。。。數(shù)據(jù),能接收到自己發(fā)出的數(shù)據(jù):0,1,2。。。使用LED作出簡(jiǎn)單指示!
硬件設(shè)計(jì)
LED控制電路原理圖
UART電路原理圖
/*----------------------------------------------------------------------
實(shí)驗(yàn)內(nèi)容:
USART自發(fā)自收,使用PB口的LED指示接收到的數(shù)據(jù),觀察是否與發(fā)送的數(shù)據(jù)一致。
----------------------------------------------------------------------
硬件連接:
將MCU.RXD與MCU.TXD使用短路帽短接,將PB口的LED指示燈使能開關(guān)切換到“ON”狀態(tài)。
----------------------------------------------------------------------*/
#include 《STM8S207S8.h》
#define LED_DDR PB_DDR
#define LED_PORT PB_ODR
#define LED_CR1 PB_CR1
#define LED_CR2 PB_CR2
void Init_UART3(void)
{
UART3_CR1=0x00;
UART3_CR2=0x00;
UART3_CR3=0x00;
// 設(shè)置波特率,必須注意以下幾點(diǎn):
// (1) 必須先寫B(tài)RR2
// (2) BRR1存放的是分頻系數(shù)的第11位到第4位,
// (3) BRR2存放的是分頻系數(shù)的第15位到第12位,和第3位
// 到第0位
// 例如對(duì)于波特率位9600時(shí),分頻系數(shù)=2000000/9600=208
// 對(duì)應(yīng)的十六進(jìn)制數(shù)為00D0,BBR1=0D,BBR2=00
UART3_BRR2=0x00;
UART3_BRR1=0x0d;
UART3_CR2=0x2c;//允許接收,發(fā)送,開接收中斷
}
void UART3_sendchar(unsigned char c)
{
while((UART3_SR & 0x80)==0x00);
UART3_DR=c;
}
@far @interrupt void UART3_Recv_IRQHandler (void)
{
unsigned char ch;
ch=UART3_DR;
LED_PORT=ch;
return;
}
void main(void)
{
unsigned char i=0;
LED_DDR=0XFF;
LED_CR1=0XFF;
LED_CR2=0X00;
Init_UART3();
_asm(“rim”);
while(1)
{
UART3_sendchar(i);
i++;
};
}
系統(tǒng)調(diào)試
短接RXD與TXD能接收到自己發(fā)送的數(shù)據(jù),斷開短接沒有接收到數(shù)據(jù)。系統(tǒng)不斷發(fā)送數(shù)據(jù):0,1,2。。。若正常接收,將收到0,1,2。。。。用LED作數(shù)據(jù)指示,LED往上加,說明系統(tǒng)程序正常執(zhí)行。
評(píng)論
查看更多