Re: [問題] 8051用RS232從電腦接收一個數值

看板ASM (組合語言)作者 (bo)時間15年前 (2009/06/25 00:45), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
※ [本文轉錄自 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
另外 DELAY(time*10000); 這種小心overflow,其它自己看
06/25 07:39, 2F
文章代碼(AID): #1AGbWyaG (ASM)
文章代碼(AID): #1AGbWyaG (ASM)