小弟在用ATMEL128和HOLT-HI3282进行通信的时候,出现了问题。我直接使用ATMEL128对端口进行赋值,把数据直接传给了HOLT-HI3282,传了四组数据(共32位),但输出的波形就第一组(最低的一个字节)是对的,别的都不和其他三组数据相匹配,乱七八糟的没有什么规律。通过HOLT-HI3282我只做发送出去数据,不接收外面的数据。我的配置的源程序如下:
#define uchar unsigned char #define uint unsigned int
#include <iom128v.h> #include <macros.h>
void main(void) { //用端口A,C发送数据,端口B进行配置,端口D也进行了一点设置 DDRA = 0xff; DDRB = 0xdb; DDRC = 0xff; DDRD = 0xfe; DDRG = 0xff;
PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; PORTD = 0x32; PORTG = 0x00; //系统时钟频率;7.3728MHZ 波特率:9600BPS UBRR0L = 0x2f; UBRR0H = 0x00; //3282进行初始化 PORTB |= 0x10; //PL1 = 1; PB4 PORTB |= 0x08; //PL2 = 1; PB3 PORTB |= 0x02; //MR = 1; PB1
//打开控制字寄存器 PORTB |= 0x01; //DBCEN = 1;PB0 PORTB &= 0xbf; //CWSTR = 0;PB6 //为控制字寄存器赋值 PORTA = 0x30; PORTC = 0x00;
//关闭控制字寄存器 PORTB |= 0x40; //CWSTR = 1;PB6 PORTB &= 0xfe; //DBCEN = 0;PB0 while(1) { PORTA = 0x03; //发送第一个字节 PORTC = 0x10; //发送第二个字节
PORTB &= 0xef; //PL1 = 0;PB4 PORTB |= 0x10; //PL1 = 1;PB4 产生一个上升沿 PORTA = 0x60; //发送第三个字节 PORTC = 0x05; //发送第四个字节
PORTB &= 0xf7; //PL2 = 0;PB3 PORTB |= 0x08; //PL2 = 1;PB3 产生一个上升沿
PORTB |=0x01; //DBCEN = 1;PB0 //插入校验位 PORTB &= 0xf7; //PL2 = 0; PORTB |= 0x08; //PL2 = 1;PB3 产生一个上升沿 while(1) { if((PINB & 0x04)==0x00) //检测TX/R是否为0? { PORTB |= 0x80; //ENTX= 1;PB7 打开数据发送使能 break; } } while(1) { if(PINB & 0x04) //检测TX/R是否为1? { PORTB &= 0x7f; //ENTX = 0;PB7; 关闭数据发送使能 break; } } } }
请问有高手以前使用过HOLT-HI3282吗?上面的程序哪些地方需要改进?做发送数据时是怎么配置的?能给出你的配置源程序吗?谢谢,谢谢,非常的感谢!!! |