作者suncongbo (bo)
看板ASM
标题Re: [问题] 8051用RS232从电脑接收一个数值
时间Thu Jun 25 00:45:47 2009
※ [本文转录自 C_and_CPP 看板]
作者: suncongbo (bo) 看板: C_and_CPP
标题: Re: [问题] 8051用RS232从电脑接收一个数值
时间: Thu Jun 25 00:45:32 2009
※ 引述《suncongbo (bo)》之铭言:
: 我想利用RS232
: 从电脑发送一个数值(1~9其中一个)
: 8051接收到後写进一个变数里面
: 然後继续原本的动作
: 直到我下一次再发送一个数字 改变变数值
: 这段期间原本跑的程式都不受到影响( while(1)回圈 )
: 请问这应该要怎麽写呢
: (写在while(1)回圈里面的第一行这样吧?)
: 感谢
我要写的程式是要这样子的:
我做了一个简单的霹雳灯(8个灯,第1个先亮,然後换第2个,...,一直到第8个;
接下来换第7个,然後第6个,...,再重头)
延迟的时间原本设定是0.1ms
我想用电脑从RS232传入数字来改变延迟时间(我所说的变数是一个叫time的变数)
结果没反应,不知道我哪边有少写了,请大家帮我看一下,谢谢!!
(我有使用8155当作扩充IO埠)
#include "reg51.h"
#include "stdio.h"
unsigned char xdata Ctrl _at_ 0x0100 ;
//这四行是定义8155的IO埠
unsigned char xdata PA _at_ 0x0101 ;
unsigned char xdata PB _at_ 0x0102 ;
unsigned char xdata PC _at_ 0x0103 ;
int time=1;
void DELAY(unsigned int value)
{
while (value!=0) value--;
}
main()
{
char c1,c2;
P2_1=1;
DELAY(10);
P2_1=0;
Ctrl=0x0f;
SCON=0x50;
/*设定UART工作在MODE1 REN=1*/ 这四行是抄书上写的
TMOD=0x20;
/*设定TIMER1工作在MODE2*/
TH1=0xe6;
/*设鲍率为1200*/
TR1=1;
/*启动TIMER1*/
while(1)
{
c2=0001;
for (c1=0;c1<8;c1++)
{
PA=c2;
c2<<=1;
DELAY(time*10000);
/*如果time=1,就会延迟0.1ms*/
}
c2=0100;
for (c1=0;c1<6;c1++)
{
PA=c2;
c2>>=1;
DELAY(time*10000);
}
}
}
void UartProcess() interrupt 4 using 2
/*这个中断程式是板友教导的*/
{
if ( RI )
{
RI = 0 ;
time = SBUF ; /*不知道我这行这样写对不对呢*/
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.4.234
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.4.234
1F:推 utility:有一个控制全域中断的设定有没有致能? 06/25 07:38
2F:→ utility:另外 DELAY(time*10000); 这种小心overflow,其它自己看 06/25 07:39