Re: [問題] 8051用RS232從電腦接收一個數值
※ [本文轉錄自 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
推
06/25 07:38, , 1F
06/25 07:38, 1F
→
06/25 07:39, , 2F
06/25 07:39, 2F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章