|
发表于 2007-3-15 23:49:57
|
显示全部楼层
Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 1
Cursor Off
Config Timer1 = Timer , Prescale = 1024
On Ovf1 Ovf1_int
Enable Interrupts
Enable Ovf1
Timer1 = &HED40
Dim S As Byte
Dim Time_ok As Bit
S = 0
Time_ok = 1
Start Timer1
Do
If Time_ok = 1 Then
Incr S
If S = 255 Then S = 0
Cls
If S > 99 Then
Locate 1 , 1
Elseif S > 9 Then
Locate 1 , 2
Else
Locate 1 , 3
End If
Lcd S
Time_ok = 0
End If
Loop
End
Ovf1_int:
Timer1 = &HED40
Time_ok = 1
Return
==================================================
bascom的LCD S语句实际上是调用了一段内部的汇编子程序在LCD上显示S的值,这段汇编子程序由若干条汇编指令组成,只有完整的执行完整段代码,LCD才能正确的显示。但你在中断中又使用了CLS的语句,它也是要调用了一段内部的汇编子程序,将LCD清屏。
原因再于,你的LCD S 对应的汇编子程序还没执行完,就被CLS打断了,而且又开始另外的对LCD屏的设置,造成对LCD发出的控制指令和数据没有按规定的次序发出,所以LCD显示出错。
中断可以打断正在对LCD的操作,但在该中断服务程序中不能对LCD再次做任何操作。 |
|