这个是我刚毕业的06年的时候写的。。。。
作微型热敏打印机,虽然看似简单的一个东西,做起来可是相当的吃力。把一些经验贴上把~以后相信会有用的
1、刚开始做的是打印头电机驱动部分,调了满久的时间。电机是二相的步进电机。实现走纸功能。关键是程序的时序要对,电机一共以下几个状态:启动,RUSH DRIVE,正常,RUSH DRIVE,停止。电机的两步才把一个点行走完。还有就是用PIC的C编译器PICC18的时候发现似乎SWITCH语句的效率不如IF的高。很是奇怪。。。。
2、打印头的电流一般要求比较高,基本在2A以上,达不到要求的话。。。就会出现打不出点,或者点不均匀的情况。因此供电电流要大!否则就够你郁闷的!
3、做字库读取其实满简单的,有公式。要把读出的点阵数据的每个点行取出来凑成一个缓冲区送打印头。
3、操作外部FLASH和RAM最郁闷,本来应该满简单,可是改来改去就没弄出来。后来发现PIC18的IO口方向的配置有问题。TIRSJ=0;我晕在这里了。。。当初真是超傻!正确的应该是TIRSJ=0x00;FLASH比RAM复杂一些,因为相对比较慢,比如写数据,在几个写周期做写入的准备后,真正写入数据完要判断DQ6或者DQ7的状态,来确认数据写入正确了。有另外一个办法,就是不写入地址,而是连续读两次FLASH的数据输出端数据。两次都一样是写入的DATA,那就OK了。做存储器的时候还有一个让我郁闷到的。因为有FLASH和RAM,他们的地址有些是复用的,使能通过一个译码器。由单片机的两个IO确定。比如。RG5和RG6.RG5=1 RG6=0时使能RAM。但是我们不能这样分两次配置,会出错,因为会和前一次的配置发生错位。使能时要用字节操作。整个字节进行一次性操作。
4、最近做串口通信,哇靠!本来也是个超级简单的东西,可是发现收的一次正确后后面全是FF,应该是没收到了。发送也奇怪,只能发一次,后面就发不了了。通过MPLAB的WATCH查看,发现发送缓冲器有数据,可是TSR,就是发送移位寄存器(数据是送到缓冲器再由硬件送寄存器的)居然一直处于满状态,这样的话,新的数据就没办法送到串口了。而发送中断标志位也就不能清零了(发送的中断标志位不能由软件清)。程序就一直在中断里跑啊跑……永远出不来了:(到底是怎么回事,暂时还是没搞清楚。。。。
5、配置寄存器时,一位一位的配置比整个字节配置要直观而且安全的多,可读性也好。
6、串口通信不正常的问题。一个不稳定的电路导致时不时的复位。因此发送的数据出现了发24组左右后就自动复位了。另外,接收出现FF的问题也找到了,改正复位后发现,接收的问题是因为ICD2在线调试模式下,串口接收有问题,直接烧进去就OK了