r7: r6 = oy*40+3+$1000+ox(2)

接着再确定该点在此字节中的位数,调用绘点程序即可。画完一屏的奇数点后,等待下一个同步脉冲到来,然后,在同样的扫描时间内,用同样的方法绘制出120个偶数点。这样,全屏显示的时间仅为40ms,人的肉眼观测到的是一条连续的曲线,不会出现隔列的效果。另外,考虑到屏幕的刷新问题,每次画点前,都要在此列先消点。消点和画点的方法类似,程序中用ox1和code1与画点加以区别,这里不再累述。

程序中用寄存器r25作标志状态寄存器,各标志位说明如下:

整个程序应用4个中断。20ms同步脉冲上升沿触发外部中断EXT_INT0,在中断服务程序中,清r25(4,5)=0,并使能两定时器T/C0和T/C1。采用T/C0定时中断,每100us中断一次,在中断服务程序中,启动AD转换。同时采用T/C1输出比较匹配A中断,每161.333 us中断一次,置位画点时间到达的标志。ADC转换结束中断,在中断服务程序中读取采样值AD,置位r25(5)。

复位时间问题

在整个设计过程中,程序调试用的是AVR单片机的在线仿真器ICE 200。但将调试好的程序经编译后烧到片子里,液晶屏却不能正常显示了。查找原因,主要是单片机和液晶屏的复位时间相差太大引起的。对于AT90S8535来说,超过50ns的低电平就会引起系统复位;而LCD的控制器SED1335,复位需要1ms以上的复位电平。所以需在程序的初始化部分,加一定的延时,以使LCD正常工作。回过头来再思考一下在线仿真能通过的原因。仿真器上电和液晶屏上电同步,在调试环境里,下载程序所花时间较长,能够满足LCD的复位时间要求,故在程序运行以后,可使LCD正常显示。