|
單片機(jī)串口接收發(fā)送數(shù)據(jù)時(shí),到底需不需要引入中斷,下面這個(gè)程序就是沒引入中斷,結(jié)果是一直在重復(fù)顯示發(fā)送文本。如果我只想顯示一遍呢。- #include <reg51.h>
-
- typedef unsigned char uint8;
- typedef unsigned int uint16;
-
- uint8 Buf[]="hello world!\n";
-
- void delay(uint16 n)
- {
- while (n--);
- }
-
- /*波特率為9600*/
- void UART_init(void)
- {
- SCON = 0x50; //串口方式1
-
- TMOD = 0x20; // 定時(shí)器使用方式2自動(dòng)重載
- TH1 = 0xFD; //9600波特率對應(yīng)的預(yù)設(shè)數(shù),定時(shí)器方式2下,TH1=TL1
- TL1 = 0xFD;
-
- TR1 = 1;//開啟定時(shí)器,開始產(chǎn)生波特率
- }
-
- /*發(fā)送一個(gè)字符*/
- void UART_send_byte(uint8 dat)
- {
- SBUF = dat; //把數(shù)據(jù)放到SBUF中
- while (TI == 0);//未發(fā)送完畢就等待
- TI = 0; //發(fā)送完畢后,要把TI重新置0
- }
-
- /*發(fā)送一個(gè)字符串*/
- void UART_send_string(uint8 *buf)
- {
- while (*buf != '\0')
- {
- UART_send_byte(*buf++);
- }
- }
-
- main()
- {
- UART_init();
-
- while (1)
- {
- UART_send_string(Buf);
- delay(20000);
- }
-
- }
復(fù)制代碼
|
|