單片機(jī)通訊程序
發(fā)送機(jī)程序
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void SET_SYSTEM(void);
uchar KEY_scan(void);
void main()
{
uchar data i;
delay(100);
SET_SYSTEM();
while(1)
{
i=KEY_scan();
if(i)
{
TI=0;
SBUF=i;
while(!TI);
}
}
}
/*************************************************************************************/
void delay(uint t) /* 延時(shí)子程序 */
{
uchar i;
while(t--)
{
for(i=0;i<125;i++) {}; /* 12 MHz 晶振大約是 1 ms */
}
}
/*************************************************************************************/
uchar KEY_scan(void) /*鍵盤掃描程序 (獨(dú)立式)*/
{
uchar data key;
P1=0xff;
key=P1;
if(key==0xff) return 0;
else
{
delay(10);
key=P1;
if(key==0xff) return 0;
else
{
switch(key)
{
case 0xfe: return 1;break;
case 0xfd: return 2;break;
case 0xfb: return 3;break;
case 0xf7: return 4;break;
case 0xef: return 5;break;
case 0xdf: return 6;break;
case 0xbf: return 7;break;
case 0x7f: return 8;break;
default : return 9;
}
}
}
}
/*************************************************************************************/
void SET_SYSTEM(void)
{
TMOD=0x20; /* 定時(shí)器1工作于方式2 */
PCON=PCON&0x07;
TH1=0xfe; /* 設(shè)置波特率 */
TL1=0xfe;
SCON=0x50;
IE=0x00; /* 即 EA=0;關(guān)所有中斷 */
TI=0;
RI=0;
TR1=1;
}
/*************************************************************************************/
接收機(jī)程序
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void SET_SYSTEM(void);
uchar KEY_scan(void);
void LED_display(uchar ,uchar);
uchar xdata IO_8155_order _at_ 0x2100;
uchar xdata IO_8155_PA _at_ 0x2101;
uchar xdata IO_8155_PB _at_ 0x2102;
uchar xdata IO_8155_PC _at_ 0x2103;
uchar data dt=0;
uchar code dig_num[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; /*共陰級(jí)數(shù)碼管的段選碼*/
void main()
{
delay(200);
SET_SYSTEM();
IO_8155_order=0x0d; /* 8155 初始化 */
while(1)
{
LED_display(0,dt);
P1=dt;
}
}
/*************************************************************************************/
void delay(uint t) /* 延時(shí)子程序 */
{
uchar i;
while(t--)
{
for(i=0;i<125;i++) {}; /* 12 MHz 晶振大約是 1 ms */
}
}
/*************************************************************************************/
void LED_display(uchar d_bit,uchar digit) /* LED 數(shù)碼管顯示子程序*/
{ /*d_bit 表示位選碼,digit 表示要顯示的數(shù)字 */
IO_8155_PC=d_bit; /* 位選碼輸出*/
IO_8155_PA=dig_num[digit]; /* 段選碼輸出*/
delay(10);
}
/*************************************************************************************/
void SET_SYSTEM(void)
{
TMOD=0x20; /* 定時(shí)器1工作于方式2 */
PCON=PCON&0x07;
TH1=0xfe; /* 設(shè)置波特率 */
TL1=0xfe;
SCON=0x50;
IE=0x90; /* 即 EA=1;ES=1;ET1=0;開(kāi)了串行口中斷,關(guān)定時(shí)器1 的中斷 */
TI=0;
RI=0;
TR1=1;
}
/*************************************************************************************/
void RI_RI(void) interrupt 4
{
RI=0;
dt=SBUF;
}
評(píng)論