[問題] RS232 1秒送一個信號用7段顯示器顯示的問題

看板Electronics作者 (宜蘭豬肉乾)時間16年前 (2009/06/18 00:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我的目標是使用RS23每秒送一個字元到7段顯示器從0算到9程式使用keil c開發 將Tx與Rx對接後 直接由80s51輸出資料與接受並且在7段顯示器上顯示數字 帶當TxRx沒有對接時資料要中斷 再將TxRx接回去時資料要可以"馬上"繼續傳送 但是測試之後沒有立即傳送的效果而且還需要一段時間才開始傳送 以下是我所寫的程式 #include <regx51.h> void Tdelay100ms(int count);// 100ms 的時間延遲副程式 void timer1_ISR(void); void init_RS232(); //RS232初始化 void tx_char(unsigned char c);//傳送資料 unsigned char code seg7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段顯示器0~9 char rx_char();//接收資料 char sec_count;//中斷用變數 rs232_print(char data1); //顯示RS232的資料到7段顯示器上 void Tdelay100ms(int count) //中斷100ms的副程式 { sec_count = count*2; IE = 0X88; TMOD = 0X10; TH1 = (65536-50000)/256; TL1 = (65536-50000)%256; TR1 = 1; while(sec_count!=0); } void timer1_ISR(void) interrupt 3 { sec_count --; TH1 = (65536-50000)/256; TL1 = (65536-50000)%256; TR1 = 1; } void init_RS232() //RS232啟動副程式 { SCON=0x50; TMOD=0x20 ; // Timer1 in Mode 2 TH1=0xfd ; // 0xfd:baud rate 9600 TR1=1 ; // Timer1 致能 TI=1 ; } void tx_char(char c) //TX傳資料的副程式 { int i; for(i=0;i<=1;i++) { while(1)if(TI)break; TI=0; SBUF=c; } Tdelay100ms(10); //延遲1秒 } char rx_char() //RX傳資料的副程式 { int i; for(i=0;i<=1;i++) { while(1)if(RI)break; RI=0; return SBUF; } Tdelay100ms(10); //延遲1秒 } rs232_print(char data1) //RS232顯示資料到7段顯示器的副程式 { char c; init_RS232(); //啟動RS232 c=0; tx_char(data1); //傳送資料data1(這邊要傳座號需要配合7段顯器的表) c = rx_char(); //接收資料 P0 = SBUF; //P0顯示SBUF內的資料 c = ~c; } void main() { int i; for(i=0;i<=9;i++) //計算9次 { rs232_print(seg7[i]); //傳輸0~9 } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.232.151
文章代碼(AID): #1AEHEa0g (Electronics)