1. 单片机秒表复位程序如何写
归零吗?直接把累计的变量置零就可以了 希望帮到你, 增加S4和复位标志Reset 我没有测试,相信你会调试好的,加油! #include
TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12 ET0=1; EA=1; while(1) { keyscan(); if(halt==0) { TR0=1; if(pp==20) { pp=0; m++; n--; P1=n;//闪烁灯 if(m==60) { m=0; f++; if(f==60) { f=0; s++; if(s==99) { s=0; } } } } a0=s%10; a1=s/10; b0=f%10; b1=f/10; c0=m%10; c1=m/10; display(a1,a0,b1,b0,c1,c0); } else if(Reset==1) { Reset=0; TR0=0; s=0; m=0; a0=s%10; a1=s/10; b0=f%10; b1=f/10; c0=m%10; c1=m/10; display(a1,a0,b1,b0,c1,c0); } else { TR0=0; display(a1,a0,b1,b0,c1,c0); } } } void time0() interrupt 1 {TH0=(65536-46080)/256; TL0=(65536-46080)%256; pp++; }。
2. 单片机秒表复位程序如何写
归零吗?直接把累计的变量置零就可以了希望帮到你, 增加S4和复位标志Reset 我没有测试,相信你会调试好的,加油! #include
TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12 ET0=1; EA=1; while(1) { keyscan(); if(halt==0) { TR0=1; if(pp==20) { pp=0; m++; n--; P1=n;//闪烁灯 if(m==60) { m=0; f++; if(f==60) { f=0; s++; if(s==99) { s=0; } } } } a0=s%10; a1=s/10; b0=f%10; b1=f/10; c0=m%10; c1=m/10; display(a1,a0,b1,b0,c1,c0); } else if(Reset==1) { Reset=0; TR0=0; s=0; m=0; a0=s%10; a1=s/10; b0=f%10; b1=f/10; c0=m%10; c1=m/10; display(a1,a0,b1,b0,c1,c0); } else { TR0=0; display(a1,a0,b1,b0,c1,c0); } }}void time0() interrupt 1{TH0=(65536-46080)/256; TL0=(65536-46080)%256; pp++;}。
3. 电动机自锁程序用复位指令写程序
置位和自锁作用一样,都是将线圈保持在“得电”状态 区别是自锁的复位条件是将前面的闭合触点断开,置位的复位条件是要使用指令将线圈复位。
置位和复位不需要连续使用,复位可以根据你设定的条件,达到一定条件后再执行。 比如置位M0线圈驱动时间继电器T,然后时间继电器T计时到后,再使M0线圈复位。
不同品牌的PLC指令会有所不同,但用法都差不多。 有些品牌的PLC有区域复位的指令,比如一次性将M1-M10这10个线圈复位,而有些牌子的就没有,指令多写几个就是了。
4. 单片机如何用C程序复位
可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。
((void (code *) (void)) 0x0000) ();
下面的例子将实现软件自复位void reset (void)
{
((void (code *) (void)) 0x0000) ();
}
void main (void)
{
reset ();
}
你可能注意到以上的软复位程序并不能清除8051的中断系统和某些8051的外围设备,当您在中断程序中调用上面的软件复位程序后,中断将再不能触发。因此,以上的软复位程序不能在中断子程序中调用。
下面的小段汇编函数可以在中断程序或主程序中调用,该函数将0x0000压栈,然后通过“RETI”出栈,这将清除中断环境并让程序从0000H重新开始运行。
?PR?RESET SEGMENT CODE
RSEG ?PR?RESET
; C prototype: void reset (void);
PUBLIC reset
reset: POP ACC ; pop return address
POP ACC
CLR A ; push 0 as new
PUSH ACC ; return address to stack
PUSH ACC
RETI ; execute return of interrupt
END
以上程序在选择bank 0寄存器组时工作良好,假如选择的不是bank0寄存器组,那么可能无法获得预料的结果。你应该在以上的程序或启动代码中加上“MOV PSW, #0”来选择bank 0寄存器组。
以上文章由龙啸九天翻译自KEIL FAQ,可能有疏漏,欢迎提出。