|
STC15L100的芯片與ZGB相連,做一個簡單的串口發(fā)送數(shù)據(jù),發(fā)送規(guī)定的數(shù)據(jù),外部中斷3進(jìn)行控制,來一個外部中斷,發(fā)送一次數(shù)據(jù)程序,下板之后,下板成功,鏈接串口助手,按下中斷,第一組DATA數(shù)據(jù)正確,延時后,發(fā)送DATA2的數(shù)據(jù),DATA2的數(shù)據(jù)變成了每一個數(shù)都延時一次,在發(fā)出下一個數(shù),DATA2應(yīng)該不延時,求大神看看程序,11.0592MHZ的內(nèi)部晶振,9600波特率。
QQ圖片20180319203914.png (49.28 KB, 下載次數(shù): 41)
下載附件
板子原理圖
2018-3-19 20:39 上傳
- #include <reg51.h>
- char code DATA[19]={0x02, 0x6c, 0x62, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1}; //顯靶
- char code DATA2[19]={0x03, 0x6c, 0x62, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1}; //影靶
- //char *ch;
- unsigned char i,j;
- //-----------------------------------------
- //define baudrate const
- //BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
- //NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)
- #define BAUD 0xFE80 // 9600bps @ 11.0592MHz
- sfr AUXR = 0x8E;
- sfr INT_CLKO = 0x8f;
- sbit RXB = P3^0; //define UART TX/RX port
- sbit TXB = P3^1;
- sbit T3 = P3^5;
- sbit led = P3^4;
- typedef bit BOOL;
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- BYTE TBUF,RBUF;//字節(jié)
- BYTE TDAT,RDAT;
- BYTE TCNT,RCNT;
- BYTE TBIT,RBIT;
- BOOL TING,RING;
- BOOL TEND,REND;
- void UART_INIT();
- void uart1_TX();
- BYTE r;
- BYTE buf[16];
- unsigned int k=0;
- //-----------------------------------------
- //initial UART module variable
- void delay(unsigned int n)
- {
- unsigned int w=0;
- while(n--)
- for(w=0;w<114;w++);
- }
- void UART_INIT()
- {
- TING = 0;
- RING = 0;
- TEND = 1;
- REND = 0;
- TCNT = 0;
- RCNT = 0;
- }
- void exint3() interrupt 11
- {
- while(T3==0);
- delay(10);
- while(T3==0)
- k = 1;
- i = 0;
- j = 0;
- led = 0;
- }
- void uart3i()
- {
- if(i<19)
- {
- TEND = 0; //發(fā)送完一個字符清一次
- TBUF = DATA[i];//發(fā)送緩沖器 進(jìn)行賦值
- TING = 1;
- i++;
- }
- }
- void uart3j()
- {
- if(j<19)
- {
- TEND = 0; //發(fā)送完一個字符清一次
- TBUF = DATA2[j];//發(fā)送緩沖器 進(jìn)行賦值
- TING = 1;
- j++;
- }
- }
- void main()
- {
- TMOD = 0x00; //timer0 in 16-bit auto reload mode定時器0在16位自動重新加載模式下
- AUXR = 0x80; //timer0 working at 1T mode定時器0在1T模式下工作
- TL0 = BAUD;
- TH0 = BAUD>>8; //initial timer0 and set reload value初始計時器0并設(shè)置重新加載值
- TR0 = 1; //tiemr0 start runningtimer0 tiemr0開始運行
- ET0 = 1; //enable timer0 interrupt使timer0中斷
- PT0 = 1; //improve timer0 interrupt priority提高定時器0中斷優(yōu)先級
- EA = 1; //總中斷
- led = 0;
- INT_CLKO |= 0x20;
- UART_INIT();
- while (1)
- { //user's function
- if (REND)
- {
- REND = 0;
- buf[r++ & 0x0f] = RBUF; //接收緩沖器 高四位清0低四位賦值
- }
- if(k == 1)
- {
- if (TEND)
- {
- {
- uart3i();
- }
- if(i==19)
- delay(1000);
- {
- uart3j();
- if(j==19)
- {
- k = 0;
- }
- }
- }
- }
- }
- }
- //-----------------------------------------
- //Timer interrupt routine for UART計時器中斷串口
- void tm0() interrupt 1 using 1
- { //****************接收數(shù)據(jù)******************/
- if (RING) //正在接受數(shù)據(jù)
- {
- if (--RCNT == 0)
- {
- RCNT = 3; //reset send baudrate counter 復(fù)位發(fā)送波特率計數(shù)器
- if (--RBIT == 0)
- {
- RBUF = RDAT; //save the data to RDAT數(shù)據(jù)保存到RBUF中
- RING = 0; //stop receive 停止接受
- REND = 1; //set receive completed flag設(shè)置接收完成標(biāo)志
- }
- else
- {
- RDAT >>= 1; //接收到的單bit數(shù)據(jù)暫存
- if (RXB) RDAT |= 0x80; //shift RX data to RX buffer 將RX數(shù)據(jù)轉(zhuǎn)移到RX緩沖區(qū)
- }
- }
- }
- else if (!RXB)//判斷開始位RXB=0
- {
- RING = 1; //set start receive flag 設(shè)置開始接收標(biāo)志
- RCNT = 4; //initial receive baudrate counter 初始接收波特率計數(shù)器
- RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) 初始接收位(8位數(shù)據(jù)位1停止位)
- }
- //*******************發(fā)送********************/
- if (--TCNT == 0)
- {
- TCNT = 3; //reset send baudrate counter 復(fù)位發(fā)送波特率計數(shù)器
- if (TING) //judge whether sending 判斷是否發(fā)送
- {
- if (TBIT == 0)
- {
- TXB = 0; //send start bit 發(fā)送起始位
- TDAT = TBUF; //load data from TBUF to TDAT 數(shù)據(jù)從TBUF加載到TDAT
- TBIT = 9; //initial send bit number (8 data bits + 1 stop bit)初始發(fā)送位(8位數(shù)據(jù)位1停止位)
- }
- else
- {
- TDAT >>= 1; //shift data to CY將 數(shù)據(jù)右移1位,低位送給CY
- if (--TBIT == 0)
- {
- TXB = 1; //發(fā)送停止位數(shù)據(jù)
- TING = 0; //stop send發(fā)送停止位
- TEND = 1; //set send completed flag設(shè)置發(fā)送完成標(biāo)志
- }
- else
- {
- TXB = CY; //write CY to TX port 發(fā)送單bit數(shù)據(jù)
- }
- }
- }
- }
- }
復(fù)制代碼 |
|