[問題] 如何把暫存器SBUF的資料讀出來?(keil C)
看板C_and_CPP (C/C++)作者billy00685 (milano)時間12年前 (2013/12/23 14:31)推噓1(1推 0噓 0→)留言1則, 1人參與討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
keil C. (89S51)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我想用rs232傳送一字串給89S51然後用LCD顯示其字串
但一直無法顯示出SBUF暫存器的資料.
是我將SBUF設字元變數時的方法有錯嗎?
錯在哪? 還是其他地方有錯?
餵入的資料(Input):
預期的正確結果(Expected Output):
第一列應該要顯示我用matlab傳送的字串.
錯誤結果(Wrong Output):
結果第一列都沒文字顯示.第二列有正確顯示"I am a LCD."
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <AT89X51.H>
#include <stdio.h> /* printf, fgets */
#include <stdlib.h> /* atoi */
#define RS P3_7
#define RW P3_6
#define E P3_5
#define DB P1
void init(void);
void position(char line,column);
void wrins(char instruction);
void display(char *string);
void wrdata(char d);
void delayms(unsigned int time);
code char string1[]={ "Kick ass ! " };
code char string2[]={ "I am a LCD." };
main()
{
char buf[10];
SCON=0x50;
TMOD=0x20;
TH1=243;
TL1=243;
TR1=1;
while(1)
{
RI=0;
while(RI==0);
if(RI==1)
{
SBUF=buf;
P0=0x00;
delayms(1000);
init();
position(1,1);
display(buf);
position(2,1);
display(string2);
}
}
}
void init(void)
{
delayms(30);
wrins(0x38);
wrins(0x38);
wrins(0x38);
wrins(0x38);
wrins(0x08);
wrins(0x01);
wrins(0x06);
wrins(0x0c);
}
void position(char line,column)
{
unsigned char instruction;
line--;
column--;
instruction=0x80+(0x40*line + column);
wrins(instruction);
}
void wrins(char instruction)
{
RS=0;
RW=0;
E=0;
delayms(1);
E=1;
DB=instruction;
delayms(1);
E=0;
delayms(8);
}
void display(char *string)
{
char k=0;
while(string[k] !=0x00)
{
wrdata(string[k]);
k++;
}
}
void wrdata(char d)
{
RS=1;
RW=0;
E=0;
delayms(1);
E=1;
DB=d;
delayms(1);
E=0;
delayms(1);
}
void delayms(unsigned int time)
{
unsigned int n;
while(time>0)
{
n=120;
while(n>0) n--;
time--;
}
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.126.8.123
推
12/23 14:45, , 1F
12/23 14:45, 1F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章