|
代碼如下 我是想1us 定時(shí)器0中斷一次 計(jì)數(shù)20000次時(shí) 定時(shí)器中斷函數(shù)里 串口1輸出數(shù)據(jù) 但是監(jiān)控串口 沒(méi)有輸出 我也加了優(yōu)先級(jí) 串口優(yōu)先2 定時(shí)器0優(yōu)先1
只有主循環(huán)里才能輸出 具體看不出時(shí)序?qū)Σ粚?duì)
請(qǐng)大佬看看哪里有問(wèn)題
難道是中斷里面不支持再次中斷
- #include <STC8G.h>
- #include <intrins.h>
- #include <stdio.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long u32;
- #define Baudrate1 115200L
- #define UART1_BUF_LENGTH 32
- u8 TX1_Cnt; //發(fā)送計(jì)數(shù)
- u8 RX1_Cnt; //接收計(jì)數(shù)
- bit B_TX1_Busy; //發(fā)送忙標(biāo)志
- u8 idata RX1_Buffer[UART1_BUF_LENGTH]; //接收緩沖
- void PrintString1(u8 *puts);
- void PrintChar(u8 dat);
- #define SYSCLK 24000000
- #define BAUD 115200 //22.1184M下,99.2-115.2均可驅(qū)動(dòng)舵機(jī)。
- #define BRT (65536 - SYSCLK / BAUD / 4)
- //端口定義
- sbit CH1in = P3^2;
- sbit CH2in = P3^3;
- sbit CH3in = P5^4;
- sbit CH4in = P5^5;
- //常量定義
- unsigned char S_data1[] = {0x00,0xFF,0xFA,0x05,0x03,0x1A,0x00,0x02,0xD9};
- unsigned char S_data2[] = {0x01,0xFF,0xFB,0x05,0x03,0x04,0x00,0x00,0xDB};
-
- u16 Scount=0;
- u8 k;
- void TM0_Isr() interrupt 1 //定時(shí)器0中斷函數(shù)
- {
-
- Scount++;
-
- if(Scount==20000){ //20ms 串口輸出一次
-
- PrintString1(S_data1);
- Scount=0;
- }
-
- }
- void Timer0Init(void) //10微秒@24.000MHz
- {
- AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
-
- //TL0 = 0x10; //設(shè)置定時(shí)初值 10微妙
- //TL0 = 0xD0; //設(shè)置定時(shí)初值 2微妙
- //TL0 = 0xE8; //設(shè)置定時(shí)初值 1微妙
- TL0 = 0xE8;
-
- TH0 = 0xFF; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
-
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
-
- ET0 = 1; //使能定時(shí)器0中斷
- EA = 1; //打開(kāi)總中斷
-
- PT0 = 1; //高優(yōu)先級(jí)中斷
-
- }
- void Delay1000ms() //@24.000MHz //軟件延時(shí)1000ms
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 92;
- j = 50;
- k = 238;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay20ms() //@24.000MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 2;
- j = 211;
- k = 231;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void UartInit(void) //115200bps@24.000MHz
- {
- SCON = 0x50; //8位數(shù)據(jù),可變波特率
- AUXR |= 0x40; //定時(shí)器1時(shí)鐘為Fosc,即1T
- AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
- TMOD &= 0x0F; //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
-
- TL1 = 0xCC; //設(shè)定定時(shí)初值 115200
- TH1 = 0xFF; //設(shè)定定時(shí)初值
-
- //TL1 = 0x8F; //設(shè)定定時(shí)初值 9600
- //TH1 = 0xFD; //設(shè)定定時(shí)初值
-
- ET1 = 0; //禁止定時(shí)器1中斷
- TR1 = 1; //啟動(dòng)定時(shí)器1
-
- ES = 1; //是能串口1中斷
- EA = 1; //使能總中斷
-
- PS = 2; //高優(yōu)先級(jí)中斷
-
- B_TX1_Busy = 0;
- TX1_Cnt = 0;
- RX1_Cnt = 0;
- }
- void UART1_int (void) interrupt 4
- {
- if(RI)
- {
- RI = 0;
- RX1_Buffer[RX1_Cnt] = SBUF;
- if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0; //防溢出
- }
- if(TI)
- {
- TI = 0;
- B_TX1_Busy = 0;
- }
- }
- void PrintChar(u8 dat) //發(fā)送字符
- {
- SBUF = dat;
- B_TX1_Busy = 1;
- while(B_TX1_Busy);
- }
- void PrintString1(u8 *puts) //發(fā)送一個(gè)字符串
- {
- unsigned char i;
- for (i=0;i<9;i++)
- {
- SBUF = puts[i];
- B_TX1_Busy = 1;
- while(B_TX1_Busy);
- }
- }
- void main(void)
- {
-
- P5M1 = 0;
- P5M0 = 0; //P5 標(biāo)準(zhǔn)輸出口
-
- P3M1 = 0;
- P3M0 = 0; //P3 標(biāo)準(zhǔn)輸出口
-
- UartInit(); //初始化串口
-
- Timer0Init();//初始化定時(shí)器
- // EX1init(); //初始化外部中斷
-
-
- while(1)//主循環(huán)
- {
-
- // PrintString1(S_data1);
-
- // Delay20ms();
-
- }
-
- }
復(fù)制代碼
|
|