[問題] RS232 1秒送一個信號用7段顯示器顯示的問題
我的目標是使用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