51串口如何用C语言编写分高低位发送的程序

51串口如何用C语言编写分高低位发送的程序,第1张

include<intrins.h>

......

......

SCON=0x00

number=0x01

......

while(1)

{

number=_crol_(number,1)

SBUF=(NUM&number)

while(!TI)

TI=0

delay()

}

......

没经过调试,你自己改改和补充,看看是不是你要的要求。

#include <REG52.H>

#define uchar unsigned char

#define uint unsigned int

sbit ring=P3^7

sbit CASE1=P2^0

sbit CASE2=P2^1

sbit CASE3=P2^2

sbit CASE4=P2^3

uchar se=0,re=0

uchar temp=0

void wait(uint cnt)

{

while(--cnt)

}

//串口发送程序

void send(uchar se)

{

SBUF=se //发送数据

while(TI == 0)

TI = 0

}

//串口接收程序

uchar receive(void)

{

re=SBUF //接收数据

while(RI==0)

RI=0

return re

}

//串口初始化

void sinti(void)

{

SCON = 0x50

TMOD |= 0x20

TH1 = 0xFD

TR1 = 1

EA= 1

ES= 1

}

void delay(int cnt)

{

while(--cnt)

}

//主程序

int main (void)

{

int i

sinti() //串口初始化程序

ring=1

while(1)

{

while (1)

{

if(CASE1==0)

{

send('a')

ring=0

break

}

if(CASE2==0)

{

send('b')

ring=0

break

}

if(CASE3==0)

{

send('c')

ring=0

break

}

if(CASE4==0)

{

send('d')

ring=0

break

}

}

if(ring==0)

{

wait(60000)

ring=1

}

for(i=0i<10000i++)

}

}

//串口中断程序

void UART_SER (void) interrupt 4 //串行中断服务程序

{

if(RI)//判断是接收中断产生

{

RI=0 //标志位清零

temp=SBUF

}

if(TI)//如果是发送标志位,清零

TI=0

}

下面的程序我已经调试过了,你可以直接使用,但是一秒闪烁次数t的最大为2000,如果要大于这个数,你必须改小dalay1ms ()内的j值,就可以改大t

#include <reg52.h>

sbit LED0=P1^0

unsigned int t=0,k

void dalay1ms (unsigned int i) //晶振选用11.0592

{

unsigned int j

for(ii>0i--)

for(j=922j>0j--)

}

void main ()

{

EA=1

ES=1

TMOD=0x20 //定时器T1方式为2

TH1=0xfa //波特率设定为9600

TL1=0xfa

while(1)

{

if(t!=0)

{

k=2000/t

dalay1ms (k)

LED0=!LED0

}

if(t==0)

LED0=0

}

}

void counter4(void) interrupt 4

{

while(RI==0)

RI = 0

t= SBUF

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11856602.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存