标题:
这个串口自己写的 写到一半不知道怎么写了 希望有人指导下
[打印本页]
作者:
2500
时间:
2016-11-4 23:26
标题:
这个串口自己写的 写到一半不知道怎么写了 希望有人指导下
我想让单片机收到1的数据后 不断往外发送 发送格式是 AA 55 00 01 HH XX DD 其中 AA 55 是固定的 00是地址码 01是数据类型 HH XX DD是数据位 0-7的IO口 我控制东西用的 我现在要写一个程序 一个测试程序 HH XX DD这里有变化 HH从01开始位移 当HH=0X40的时候 HH=00 XX开始从01位移 当位移至 XX=0X40的时候 DD=0X00 DD开始位移 位移至0X40的时候 XX=0X00 地址码+1 重复HH XX DD的步骤 然后地址码再+1如此循环 。 写了一点点 实在不知道怎么写了 请教下大家
9600波特率
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int flag,a,b,i;
unsigned char Send_data[7];
unsigned char DATA[3];
void Readdata(void)
{
unsigned char A1;
unsigned char A2;
unsigned char A3;
unsigned char A4;
unsigned char B1;
unsigned char B2;
unsigned char B3;
unsigned char B4;
A1=0X01;
A2=0X01;
A3=0X01;
A1=_crol_(A1,1);
DATA[0]=A1;
DATA[1]=0X10;
DATA[2]=0X12;
}
void init() //串口配置函数,baud为波特率
{
TMOD= 0x20; //配置T1为模式2
TH1 = 0XFD;
TL1 = 0XFD; //初值等于重载值
TR1 = 1; //启动T1
ES = 1; //使能串口中断
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void Uart1sendData(unsigned char send_data)//数据发送
{
SBUF=Send_data;
}
void main()
{
init();
Readdata();
while(1)
{
if(flag==1)
{
ES=0;
if(a==1)
{
while(1)
{
Send_data[0]=DATA[0];
Send_data[1]=DATA[1];
Send_data[2]=DATA[2];
}
}
while(!TI);
TI=0;
ES=1;flag=0;
}
}
}
void ser()interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
作者:
2500
时间:
2016-11-4 23:29
位移1次发送一次数据出去 格式还是7个字节
作者:
yzwzfyz
时间:
2016-11-5 00:10
需要做三件事:
第一:需要做一个缓冲区放需要发送的所有数据,设:BUF1为缓冲区。用数组也可以。
作者:
yzwzfyz
时间:
2016-11-5 00:11
第二:需要做一个存放数据的指针,设为:P放。P放=放入数据的地址,放1个数以后就+1,开始P放=1,以后始终指向末尾,即下一个要放的位置。数据何时放不限。
作者:
yzwzfyz
时间:
2016-11-5 00:12
第三:需要做一个发送数据的指针,设为:P发。开始P发=1,当P发<>P放,就从P发指定的位置取一个数发送出去,而后P发+1;
当P发=P放,结束发送。
作者:
yzwzfyz
时间:
2016-11-5 00:28
本帖最后由 yzwzfyz 于 2016-11-5 00:32 编辑
主程序中,截取部分如下,供参考:
SEND_NEXT: MOV A, R_TX1PC发 ;取发送指针
CJNE A, R_TX1PC放, SEND1_TX ;与存入指针比
MOV R_TX1PC发, #0 ;相同结束,指针复位,也可不复位(循环使用)
MOV R_TX1PC放, #0
JMP SEND1END ;结束
;发、放指针不等来此处,取一个数发送
SEND1_TX: MOV A, R_TX1PC发 ;将发送指针
MOV DPL, A ;指向缓冲区地址
MOV DPH, #HIGH(BUF1) ;发送缓冲区首
MOVX A, @DPTR ;取数
MOV SBUF, A ;发一个字节
INC R_TX1PC发 ;下个字节
SEND1END:
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1