線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1527
推到 Plurk!
推到 Facebook!

8051將外部記憶體的資料經串列阜顯示在電腦上

尚未結案
lori00024
一般會員


發表:1
回覆:0
積分:0
註冊:2009-11-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-11-21 00:09:28 IP:210.70.xxx.xxx 訂閱
你好,各位8051高手!!
1、我要利用8051的計數器功能去計數P3.5這一隻訊號腳的第一個 5V到第二個 5V的時間。
2、P3.5接的是一個近接開關的OUTPUT腳,近接開關為一個1-bit 的數位輸出訊號。
3、將計數到的時間,存進外部記憶體SRAM(62256)內,
在將外部記憶體內的data顯示到pc上。

我的想法是,近接開關訊號腳名稱為SIGNAL_IN
當第一個SIGNAL_IN進來時 (SIGNAL_IN=1)時,啟動計數器(TR0=1)
當第二個SIGNAL_IN進來時 (SIGNAL_IN=1)時,關閉計數器(TR0=0)
將值依序丟入SRAM內,進而顯示到PC

我現在遇到的問題是:
我是先測試取值的部份,先將取到的時間利用8顆led燈顯示出來。結果是值有出來在led燈上。
再來就在程式及電路加上外部記憶體和串列阜的部份,結果在pc上卻顯示亂碼.............????
我找好久~~~找不出問題在哪裡.......
各位高手幫幫忙...........

以下是我的程式
#include
//#include
sbit SIGNAL_IN =P3^5; //近接開關訊號
sbit sled =P1^1; //工作燈1
sbit wled =P3^6; //工作燈2
unsigned char data TH_BUF;
unsigned char data TL_BUF;
unsigned int count_1=0 ; //計算計數溢位
char xdata SRAM[21845]; //宣告外部記憶體位址
char i;

//串列初始
//---------------------------------------------------
void init_UART(unsigned int baudrate)
{
SCON=0x53;
TMOD=0x21;
PCON=0x80; //SMOD=1 - Baudrate Double
TH1=256-(28800/baudrate);
TL1=TH1;
TR1=1;
}
//串列傳送資料
//---------------------------------------------------
void Outp(unsigned char c)
{
SBUF=c;
while(TI == 0);
TI=0;
}
//串列接收資料
//------------------------------------------------------
unsigned char Inp(void)
{
char c;
while(!RI); //判斷是否有資料接收
RI=0; //RI旗標歸0
c=SBUF;

return (c);
}

//Delay-----------------------------------------------
void Delay(unsigned char count)
{
unsigned char i,j; //delay8.8us
for(i=0;i for(j=0;j<114;j );
}

//Timer-0 初值設定
//----------------------------------------------------
void SET_T0() //計數近接開關觸碰次數
{
TH0=(65536-65536)/256; //設定TH0 初值
TL0=(65536-65536)%6; //設定TL0 初值
}

//----------------------------------------------------

main()
{
unsigned char test=0;
init_UART();
IE=0x80;
SET_T0();
TF0 =0;
count_1 = 0;
sled = 0;


for(i=0;i<=21845;i )
{

if(TF0==1)
{
count_1 ;
SET_T0();
TF0 =0;
}
if(SIGNAL_IN && test)
{
if(count_1>1)
{
TR0 = 0;
TF0 = 0;
sled = ~sled;
test = ~test;
SRAM[i]= ~count_1;
wled=~wled;
Outp(SRAM[i]);
SET_T0();
count_1= 0;
Delay(100);
}
}
if(SIGNAL_IN && ~test)
{
TR0 =1 ; test = ~test; sled= ~sled;
Delay(100);
}
}

}





系統時間:2024-04-25 22:16:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!