作者f1671790 (宜兰猪肉乾)
看板Electronics
标题[问题] RS232 1秒送一个信号用7段显示器显示的问题
时间Thu Jun 18 00:02:43 2009
我的目标是使用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