C51单片机:设计一个串行通信程序,波特率为1200b/s,发送数据I Love U Forever
这是一个上位机可调波特率通讯协议的解决方案:
1、首先约定一个起始通讯的低波特率,在单片机启动时按低波特率传输协议信息。
2、根据协议信息由程序配置单片机传输数据波特率,上位机延时等待单片机应答信号后开始按高波特率传输数据。
/*出处:单片机串口下载协议*/
ORG 0000H
AJMP MAIN ;上电,转向主程序
ORG 0023H ;串行口的中断入口地址
AJMP SERVE ;转向中断服务程序
ORG 0040H ;主程序
MAIN: MOV SP,#60H ;设置堆栈指针
MOV SCON ,#50H
MOV PCON ,#00H
MOV TMOD,#20H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1
MOV R0 ,#20H ;置发送数据区首地址
MOV R1 ,#40H ;置接收数据区首地址
MOV R7 ,#10H ;置发送字节长度
MOV R6 ,#10H ;置接收字节长度
SETB ES ;允许串行口中断
SETB EA ;CPU允许中断
MOV A ,@R0 ;取第一个数据发送
MOV SBUF ,A ;发送第一个数据
SJMP $ ;等待中断
SERVE: JNB RI ,SEND ;TI=1,为发送中断
CLR RI
MOV A ,SBUF ;读出接收缓冲区内容
MOV @R1 ,A ;读入接收缓冲区
DJNZ R6 ,L1 ;判断数据块发送完否
SJMP L2 ;数据块接收完,转L2
L1:INC R1 ;修改数据区指针
L2:RETI ;中断返回
SEND:
CLR TI ;清除发送中断标志
DJNZ R7 ,L3 ;判断数据块发送完否
SJMP L4 ;数据块接收完,转L4
L3: MOV A ,@R0 ;取数据发送
MOV SBUF ,A ;发送数据
INC R0 ;修改数据地址
L4:
RETI ;中断返回
END
//晶振=12M
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x40;
TH1 = 0xE6;
TL1 = TH1;
PCON = 0x00;
TR1 = 1;
}
void SendString(unsigned char *c)
{
while(*c)
{
SBUF = *c++;
while(!TI);
TI = 0;
}
}
void main(void)
{
InitUART();
SendString("I Love U Forever");
while(1);
}
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void putc_to_SerialPort(uchar c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void puts_to_SerialPort(uchar *s)
{
while(*s != '\0')
{
putc_to_SerialPort(*s);
s++;
Delay(5);
}
}
void main()
{
uchar c = 0;
SCON = 0x40;
TMOD = 0x20;
PCON = 0x00;
TH1 = 0xe8;
TL1 = 0xe8;
TI = 0;
TR1 = 1;
Delay(200);
puts_to_SerialPort("I Love U Forever\r\n");
Delay(50);
while(1);
}
基于51单片机的计算器设计
第二章:精挑细选,明智之选——AT89S52 在方案抉择中,我们对比了FPGA与AT89S52,最终AT89S52以其较低的成本和出色的实用性,成为我们首选的单片机平台。它以其8位微控制器和8k Flash存储器,256字节RAM等特性,为计算器设计提供了理想的嵌入式解决方案。第三章:硬核硬件,构建智能基石 核心硬件由AT89S...
利用51单片机设计一个秒表 (一定要按要求做到0.01秒)
wait_key(); TR0 = 0;wait_key(); m[0] = m[1] = m[2] = m[3] = 0;} } void time0() interrupt 1 { counet++;counet %= 40;if(!counet) { m[0]++; m[0] %= 10;if(!m[0]) { m[1]++; m[1] %= 10;if(!m[1]) { m[2]++; m[2] %= 10;if...
51单片机设计一个程序:按键每按一次,数码管加1;当数码管加到9后又...
include<reg51.h> sbit k1=P3^3;define uint16 unsigned int define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if...
设计一个STC51单片机控制的RGB三基色LED灯光模式控制系统。
你最起码要做一个恒流源,给LED供电。D\/A转换模块。控制电流的大小。然后调节个个灯的电流变化就可以了,应该有那种调光IC卖的,让单片机直接控制调光IC就可以了。调光IC自带恒流输出,这样就省事了。
51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。
ORG001BH LJMPT1INT LEDDEQU30H LEDCEQU 36H SECCEQU 37H TCNTEQU 3AH ORG 0030H ;--- TABLE: ; 共阴极数码管显示代码表 DB 0FCH;"0"00H DB 60H;"1"01H DB 0DAH;"2"02H DB 0F2H;"3"03H DB 66H;"4"04H DB 0B6H;"5"05H DB 0BEH;"6"06H DB 0E0H;"7"07H DB 0...
MCS-51单片机设计一方波发生器,周期为500ms的程序。汇编语言!
定时50ms,软件计数5次 ORG 0000H LJMP START ORG 000BH LJMP Timer0Interrupt START:MOV SP,#60H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV R7,#5 SETB P1.0;输出方波引脚 SETB EA SETB ET0 SETB TR0 SJMP Timer0Interrupt:MOV TH0,#3CH MOV TL0,#0B0H DJNZ R7,RT MOV...
用mcs-51单片机设计一频率测试计,要求频率范围10HZ-100KHZ
可以这样做!将待测频率频率信号作为51的中断源,中断服务程序在每一次中断时加一,同时时钟记录一定数量外中断的发生时间,这样可以计算出频率来,51的晶体选择要足够高的频率,防止漏掉中断.根据不同的51 要是12个clk的至少应该12m.
关于51单片机若干的问题,急。。。
关于51单片机若干的问题,急。。。1.设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。2.用1个按键控制LED的显示,要求显示3种以上的不同模式。3.采... 1.设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。2.用1个...
用51单片机设计一个电子钟
sbit key=P3^5;sbit key1=P3^4;uchar t0,numn,numy,numr,nums,numf,numm,sw,w,q,b,s,g,sw1,w1,q1,b1,s1,g1,rq,temp,x;uint u;void init();void display(uchar,uchar,uchar,uchar,uchar,uchar);void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=70;y>0;y--)...
用51单片机设计一个由3个按键显示两位的程序分别是15,25,35。_百度知 ...
EA=1; \/\/开总中断 ET1=1; \/\/开启T1中断 TR1=1; \/\/启动T2定时器 if (aa==72000) \/\/1800*50=半小时 \/\/以上是用定时器1.} void timer0() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;aa++;} void timer0() interrupt 3 { TH0=(65536-50000)\/256...
龚牵头孢: #include <reg52.h>#define uint unsigned int#define uchar unsigned char void Delay(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } void putc_to_SerialPort(uchar c) { SBUF = c; while(TI == 0); TI = 0; } void puts_to_SerialPort(uchar *s) { while(*s != '\...
盘龙区15647265414: c51语言编写,串口通讯程序,实现AT89S52单片机把一个整型数组数据,发送给?
龚牵头孢: void Init_Serial(void) { RD485=0; SCON = 0x50; //串口工作方式1 TMOD = (TMOD&0x0F)|0x20; //选择定时器1方式2 PCON = 0x80; // 波特率倍增 TH1 = 0xF6; // 计数初值9600bps TR1 = 1; // 启动定时器1 IE |= 0x90 ; //Enable Serial Interrupt ...
盘龙区15647265414: 求一个C51单片机与PC机串口通信的程序 - ?
龚牵头孢: #include<reg52.h> unsigned char flag,a; void main() { TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;while(1){/* if(RI==1){RI=0;P1=SBUF;}*/if(flag==1){ES=0;flag=0;...
盘龙区15647265414: 单片机(c51)的串行通信的程序(最好汇编语言和c语言都给)??
龚牵头孢: 要串口通讯其实是很简单的:只要设置以下参数:TMOD TH1 TL1 SMOD(PCON) SCON EA ES TR1等.以下代码,供初始化用参考:MOV TMOD,#20H ;定时器1用作波特率发生器ORL PCON,#80HMOV TL1,#0F3H;4800波特率的初值,板子...
盘龙区15647265414: 求单片机c51的双机之间的串行通信设计课程设计程序,学得不精,所以求助 - ?
龚牵头孢: 以下是一段单片机双机通讯的发送和接收程序,希望对你有帮助,如果有什么地方有疑惑,可以提出来再加QQ聊.发送程序如下: ORG 1000HASTART: CLR EAMOV TMOD, #20H ; 定时器1置为方式2MOV TH1, #0F4H ; 装载定时器初值...
盘龙区15647265414: 高分求51单片机串口通信的程序 - ?
龚牵头孢: #include <reg52.h>#include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EN = P2^2;#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; uchar data RXDdata[ ] = {0x...
盘龙区15647265414: C51单片机与PC串口通信的单片机部分程序 - ?
龚牵头孢: 下面这个程序没有什么实际价值,只用于演示串口程序的编写 注意波特率是9600 功能:电脑通过串口给单片机发一个字节,单片机收到后又给电脑发回去#include<reg52.h>#define uchar unsigned char#define uint unsigned int uint temp; bit flag; ...
盘龙区15647265414: 求51单片机与PC串行通讯C51简单小程序?(PC向单片机发送并返回接收状态控制小灯点亮,简易.是为了做实验 - ?
龚牵头孢: #include <REG52.H> sbit LED = P2^0; bit Flag; unsigned int ReData,SenData; void main (void) { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1TMOD|= 0x20; //定时器工作方式2PCON= 0x00;TH1 = 0xFD; //baud reload value ...
盘龙区15647265414: 请单片机高手帮我简述下“串行接口通讯程序设计的基本步骤”? - ?
龚牵头孢: 1 初始化串口通讯2 定义发送函数和接收函数 这里有一个我做的两个串口的利用单片机做交换机做聊天工具的代码片段,希望你有用 初始化函数 void Serial() { TMOD=0x20;TH1=0xFD;TL1=TH1; SCON=0x50;TR1=1;ES=1;EA=1; BRT=0xFD;S2...
盘龙区15647265414: 一道51单片机的C语言程序,关于串口通讯的,很简单...... - ?
龚牵头孢: #include<reg52.h> //增强型52寄存器的定义 #define uchar unsigned char //用uchar代替unsigned char #define uint unsigned int //用uint代替unsigned int unsigned char flag,a,i; //定义变量flag,a,i uchar code table[]="I receive,thanks"; //定义一个...