12_traffic_timer_int(改)
2012-05-06 00:18
267 查看
CURR_NUM EQU 30H ;HEX VAR_TIMER EQU 31H ;Soft timer VAR_LED EQU 32H ;Led value,#03FH for red led,#0CFH for green led,#0F3H for yellow led VAR_HIS_LED EQU 33H DAT_74164 bit P0.6 CLK_74164 bit P0.7 DIG_1 bit p0.5 DIG_2 bit p0.4 ;******************************************* org 0000H jmp MAIN org 000BH jmp interrupt_T0 ;******************************************* org 0030H ;Start program from 0030H MAIN: mov P0,#0FFH ;Initialize the port mov P1,#0FFH mov P2,#0FFH mov P3,#0FFH /*Initilize the var*/ mov CURR_NUM,#18 mov VAR_TIMER,#00H mov VAR_LED,#03FH mov P1,VAR_LED /*Initialize T0*/ mov TMOD,#01H mov TH0,#0B1H ;20ms,load number mov TL0,#0E0H setb TR0 ;Start T0 setb ET0 ;Enable T0 inerrupt setb EA ;Enable interrupt ;mov IE,#82H ;#10000010B MAIN_LOOP: call DISPLAY_NUM ;Display number jmp MAIN_LOOP ret ;**************************************************** interrupt_T0: push acc ;Pay attention to here push psw ;Reset T0,must be done ;clr TF0 ;auto clear the tag of overflow mov TH0,#0B1H ;20ms,reload number mov TL0,#0E0H inc VAR_TIMER ;Add 20ms /*If VAR_TIMER=50,then time for 1s */ mov a,VAR_TIMER cjne a,#50,INT_T0_EXIT mov VAR_TIMER,#00H call NUM_SUB INT_T0_EXIT: pop psw pop acc reti ;**************************************************** DISPLAY_NUM: ;A<-A/B, mov a,CURR_NUM mov b,#0Ah div ab mov r0,a ;Display the low value mov a,b mov dptr,#TAB_LED movc a,@a+dptr call sendTo74164 ;Display the numbet clr DIG_1 setb DIG_2 call DELAY_DISP ;Display the high value mov a,r0 mov dptr,#TAB_LED movc a,@a+dptr call sendTo74164 ;Display the numbet clr DIG_2 setb DIG_1 call DELAY_DISP ret ;******************************************* ;Send data of A to chip 74LS164 sendTo74164: push 07h push acc mov r7,#08 ;send 8 bits SEND164_LOOP: clr CLK_74164 ;clear clock-line for reading data rlc a mov DAT_74164,c ;move data-bit to data-line setb CLK_74164 ;send data to 74164 djnz r7,SEND164_LOOP clr CLK_74164 ;clear clock-line for reading data pop acc pop 07h ret ;**************************************************** NUM_SUB: ;Get previos value mov a,CURR_NUM jz NUM_SUB_RESET NUM_SUB_1: ;Simple sub 1 mov a,CURR_NUM cjne a,#03,DDEC jmp To_Yellow To_Yellow: mov VAR_HIS_LED,VAR_LED mov VAR_LED,#0F3H mov p1,VAR_LED dec a cjne a,#00,NUM_SUB_EXIT NUM_SUB_RESET: mov a,#18 ; call CHANGE_LED ;Red to green or green to red DDEC: dec a NUM_SUB_EXIT: mov CURR_NUM,a ret ;**************************************************** CHANGE_LED: push acc mov a,VAR_HIS_LED cjne a,#03FH,TO_RED_LED mov VAR_LED,#0CFH ;Red to green led jmp CHANGE_LED_EXIT TO_RED_LED: mov VAR_LED,#03FH ;Green to red led CHANGE_LED_EXIT: mov P1,VAR_LED pop acc ret ;**************************************************** DELAY_DISP: mov r7,#10 DELAY_DISP_LOOP: mov r6,#200 djnz r6,$ mov r6,#200 djnz r6,$ djnz r7,DELAY_DISP_LOOP ret ;**************************************************** ;**************************************************** ;LED code TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;**************************************************** END
相关文章推荐
- error C2146: 语法错误: 缺少“;”(在标识符“m_tTimer”的前面) error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
- 【c++ Primer 】 4.10复习题 12题(int)、(int&)和(int*)
- 【c++ Primer 】 4.10复习题 12题(int)、(int&)和(int*)
- Unity frameIndex = (int)(timer / (1f / framePerSecond));
- vbox-安装fedora12,启动出现fatal:int18:boot failure
- Visual Studio C/C++ 连续两个 int 数据所占的内存地址之间相差12?
- 【c++ Primer 】 4.10复习题 12题(int)、(int&)和(int*)
- 解决unresolved external symbol "public: int __thiscall CWnd::KillTimer(unsigned int)" (?KillTimer@CWnd@@QAEHI@Z)问题
- Andriod学习笔记(12)---关于Timer的使用例子
- 写一个函数,要求传入一个1到n位数的随机数值,如传入随机数123456789,返回12345金币67银币89铜币,传入随机数1234,返回0金币12银币34铜币。 提示:推荐Int,Rnd,Mid,L
- FAQ_12_陌生的VERSION.SDK_INT
- 线程同步和Timer定时器_12
- 【c++ Primer 】 4.10复习题 12题(int)、(int&)和(int*)
- 学点 C 语言(12): 数据类型 - 整型(int)、字符(char)、浮点(float、double)
- Leetcode-12 int to Roman
- 编程题:计算:s=a+3*-2/(int)(a+b)-12的结果,其中a=1.7,b=2.4。
- C语言复杂声明:char *(*(**(*(*(*x[5])(int,float))[][12])(double))(short,long))[][173];
- ASP.NET AJAX Roadmap--Server Controls (12): Timer Control Tutorial
- FAQ_12_陌生的VERSION.SDK_INT
- 12 Integer to Roman(int转罗马数字Medium)