最近调试 WH-E17打印机, 串口模式,按照给的demo,编写了程序,但始终print 乱码。
使用工具: avr128 、 WH-E17微型打印机 、 串口模式
demo 程序如下:
//编译器 :ICCAVR, avr128; devices configuration : atmega128/CAN
// 连接方式 :串口0连接 9600 1 -- 8 -- 1 没有校验位
// 错误现象 : 打印乱码
// 2011.9.24---0:11
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define F_CPU 8000000
void Print_Byte(uchar data)
{
//while (BUSY());
// while(!(UCSR0A&(1<<UDRE0))) ;
// while(PINF&(BIT(0))); //忙线去掉
UDR0=data;
while(!(UCSR0A&(1<<TXC0)));
UCSR0A|=BIT(TXC0);
}
//定义发送一个数组的数据到串口的函数
void Print_Array(array,n)
uchar array[]; 符串送到串口的函数
void Print_String(uchar *str){
while(*str){
Print_Byte(*str++);
}
}
void uart_init()
{
UCSR0B=0x00; //00
UCSR0A=0x00; //控制寄存器清零
UCSR0C =0x06; //选择UCSRC,异步模式,禁止 // 校验,1位停止位,8位数据位
UBRR0L=(F_CPU/16/(9600+1))%256;
UBRR0H=(F_CPU/16/(9600+1))/256;
// UCSR0B=0x9B;
UCSR0B=0x0B; //8位收发
// SEI(); //接收、发送使能,接收中断使能
//SREG=BIT(7); //全局中断开放
DDRE|=0x02; //配置TX为输出(很重要)
PORTE = 0xFF;
}
void delay_ms(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}
main (void)
{
DDRF = 0;
PORTF = 0xff;
uart_init();
//init printer
Print_Byte(0x1B);
Print_Byte(0x40);
delay_ms(3);
{
Print_Byte(0x1c); //1c
Print_Byte(0x26); //26
Print_Byte(0x00);
Print_String("打印吧");
Print_Byte(13);
}
while(1);
}
文章评论(0条评论)
登录后参与讨论