codycody23 发表于 2007-6-3 23:35:01

马老师,**?用1602显示30s倒计时,第二次进入倒计时卡住了?**

实验是用51-AVR的板子搭的



**?用1602显示30s倒计时,第二次进入倒计时卡住了?**



?用1602显示30s倒计时,第二次进入倒计时卡住了?

用1602显示30s倒计时,用按键控制,但第二次进入倒计时卡住了



用1602显示30s倒计时:按下两次c.0开始键输入进入倒计时,倒计时结束,然后按c.1为程序复位。然后进入第二次倒计



时,按下两次c.0开始键输入进入倒计时,但是卡住了,

1602 只显示:



“time remains”

   “ 96”

然后就卡在这里了,找不到原因。。。。序复位时已经重新初始化了啊?单片机环境应该和第一次倒计时一样啊。

为什么会卡死在这里呢?

只能给M16断电,后重新通电开机第一次又可以,到了第二次倒计时又卡死了。。。。



请大家帮指出小弟的错误:











$regfile = "m16def.dat"

$crystal = 1000000

Dim Beginbutton As Bit

Dim timing As byte

Dim Resetbutton As Bit

Config Pinc.1 = Input               'c.0为开始键输入口.

Config Pinc.3 = Input                                    '定义c.1为程序复位键输入口

Declare Sub Timeout(n As Byte)

Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs =



Porta.2

Config Lcd = 16 * 2   





Test0:                            'Test0:端口初始化输入全部拉高



Portc.1 = 1

Portc.3 = 1



Beginbutton = 1



Resetbutton = 1

Portc.3 = 1

Portc.1 = 1

Timing = 30                                                 '定时Timing为30s倒计时

Cls

Cursor Off Noblink



Locate 1 , 3

Lcd "Test is ok!"                                           '检测LCD

Locate 2 , 1

Lcd "pls press start"





Test1:                                             'Test1开始扫描开始按键

Do



Beginbutton = Pinc.1

If Beginbutton = 0 Then Sound Pinb.0 , 100 , 100

If Beginbutton = 0 Then Cls

If Beginbutton = 0 Then Lcd "   begin!"       'LCD提示按下开始键

If Beginbutton = 0 Then Exit Do            ' 检测到开始键按下跳出徇环到Test2续扫描抢答按键



loop





Test2:

Beginbutton = 1                              '开始键拉高



Do



Beginbutton = Pinc.1                        ' 再次检测开始键   

If Beginbutton = 0 Then Sound Pinb.0 , 100 , 100

If Beginbutton = 0 Then Call Timeout(timing) '如果开始键再次按下跳转到倒计时Timeout



loop



end





Sub Timeout(n As Byte)                  ' 倒计时Timeout(n As Byte)

Local A As Byte

A = 0

A = N



Cls

Locate 1 , 3

Lcd "time remains"



Do '显示到计时过程



Locate 2 , 7

Lcd A

Wait 1

A = A - 1



If A = 0 Then Exit Do '到计时结束跳出到等待复位



Loop



Cls

Locate 1 , 4

Lcd "timeout"

Locate 2 , 1

Lcd "pls press reset"



Do   '等待复位



Resetbutton = Pinc.3                                       

If Resetbutton = 0 Then Sound Pinb.0 , 100 , 100            '按键发声



If Resetbutton = 0 Then Cls

If Resetbutton = 0 Then Goto Test0



Loop



End Sub









出现问题:第一次进入倒计时成功运行,按c.1(不用reset口)程序复位重新开始,然后按两次开始键进如第二轮道计



时LCD1602 1602 只显示:



“time remains”

   “ 96”



然后就卡在这里了!



为什么呢?程序复位时已经重新初始化了啊?单片机环境应该和第一次倒计时一样啊。

实验是用板子搭的

codycody23 发表于 2007-6-3 23:38:58

我是实验写抢答器的,这个是其中的一个功能--抢答倒计时,在整个程序中就出现第二次进入倒计时卡住了,上面的是我吧出问题的部分copy出来ISP下载到板子上调试,问提依然存在。。。。。。。。





变量没有复位?---我都跳到“Test0:”开始执行了。。。







//



Test0:                            'Test0:端口初始化输入全部拉高



Portc.1 = 1

Portc.3 = 1



Beginbutton = 1



Resetbutton = 1

Portc.3 = 1

Portc.1 = 1

Timing = 30                                                 '定时Timing为30s倒计时



//





不知道是哪个变量出问题没有复位啊 :(

machao 发表于 2007-6-4 02:17:56

先重新编写程序,不准用goto语句。
页: [1]
查看完整版本: 马老师,**?用1602显示30s倒计时,第二次进入倒计时卡住了?**