|
新手刚接触K600+,想当显示屏用。单片机做上位机,求大佬们解释一下,有没有这种51简单的例程。 急求 759111922@qq.com 谢谢!
#include <c8051f020.h>
void SendStr(unsigned char *s);
void PORT_Init()
{
XBR0 = 0x04;
XBR2 = 0x40;
P1MDOUT =0xff;
}
void SYSCLK_Init()
{
unsigned int i;
OSCXCN=0X67; //0X67=0110,0111
for(i=0;i<256;i++); //等待>1ms
while(!(OSCXCN&0X80)); //等待XTLVLD变为1
OSCICN=0X88; //时钟失效监测器,选择外部时钟源作为系统时钟
}
void InitUART (void)
{
SCON0 = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD = 0x21; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFF; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL1 = 0XFF;
TR1 = 1; // TR1: timer 1 打开
PCON=0x80; //波特率设置为9600
EA = 1; //打开总中断
ES0 = 1; //打开串口中断
}
void main (void)
{
WDTCN=0XDE;
WDTCN=0XAD;
SYSCLK_Init();
PORT_Init();
InitUART();
//打开串口中断
while (1)
{
ES0=0;
SendStr("0X5A 0XA5 0X03 0X80 0X02 0X20");
ES0 = 1;
while(!TI0);
TI0 = 0;
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF0 = dat;
while(!TI0);
TI0 = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
unsigned char Temp; //定义临时变量
if(RI0) //判断是接收中断产生
{
RI0=0; //标志位清零
Temp=SBUF0; //读入缓冲区的值
SBUF0=Temp; //把接收到的值再发回电脑端
}
if(TI0) //如果是发送标志位,清零
TI0=0;
}
|
|