合適新手學習的51單片機串口收發及定時器, 多文件結構, 我盡量備注詳細
方便在此基礎上開發跟串口相關的應用
JD20190319194003.png (3.38 KB, 下載次數: 54)
下載附件
2019-3-19 19:40 上傳
單片機源程序:
- /***********************************
- * STC89/90 系列 *
- ***********************************/
- //定時器相當于電腦的多任務,多線程
- #include "config.h" //公共變量
- #include "command.h" //公共函數
- #include "UART.h" //串口文件
- //****************** 主程序 *******************
- void main()
- {
- //打開串口
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
-
- //定時器0 對應interrupt 1
- TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
- TH0=0x00; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
- ET0=1; //定時器0中斷打開
- TR0=1; //定時器0開關打開
-
- //定時器1 對應interrupt 4
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
- TH1 = 0xFD; // TH1: reload value for 9600 baud @ 11.0592MHz
- TR1 = 1; //定時器1開關打開
- //定時器2 對應interrupt 5
- RCAP2H = (65536-50000)/256;
- RCAP2L = (65536-50000)%256;
- ET2 = 1; //定時器2中斷打開
- TR2 = 1; //定時器2開關打開
-
- EA = 1; //打開總中斷
- ES = 1; //打開串口中斷
-
-
- i1=0,i2=0;i3=0;cmd1=0;
- while (1) { //無限循環
- UART_main(); //串口接收發送
- }
- }
- //********** 定時器0 ***********
- void time0() interrupt 1
- {
- TH0=0x00;TL0=0x00; //重新賦值,必需
- /*i3++;
- if(i3>20){
- LED1=~LED1;
- i3=0;
- }*/
- }
- //********** UART的定時器1中斷程序 ***********
- void time1() interrupt 4
- {
- if(RI) { //判斷是接收中斷產生
- RI=0; //標志位清零
- if(SBUF!='~'){ //如果結尾不是~符號
- Tbuf1[i1]=SBUF; //值存到數組
- }
- i1++; //累加
- if(SBUF=='~'){ //如果值為~符號
- cmd1=1; //設結束標志
- }
- }
- if(TI) { //如果是發送標志位,清零
- TI=0;
- }
- }
- //********** 定時器2 ***********
- void time2() interrupt 5
- {
- TF2=0;
- i3++;
- if(i3>10){
- LED1=~LED1;
- i3=0;
- }
- }
復制代碼
全部資料51hei下載地址:
STC89C52串口通迅+3個定時器.zip
(29.36 KB, 下載次數: 52)
2019-3-19 19:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|