Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 5.63 KB | None | 0 0
  1. ;====================================================================
  2. ; Main.asm file generated by New Project wizard
  3. ;
  4. ; Created:   Чт окт 20 2016
  5. ; Processor: AT89C52
  6. ; Compiler:  ASEM-51 (Proteus)
  7. ;====================================================================
  8.  
  9. $NOMOD51
  10. $INCLUDE (80C52.MCU)
  11.  
  12. ;====================================================================
  13. ; DEFINITIONS
  14. ;====================================================================
  15.  
  16. ;====================================================================
  17. ; VARIABLES
  18. ;====================================================================
  19.  
  20.  
  21.  
  22.  
  23. ;====================================================================
  24. ; RESET and INTERRUPT VECTORS
  25. ;====================================================================
  26.  
  27. RED_LED BIT P3.5
  28. RED_ENABLE BIT 2AH.0
  29.  
  30. INDIC_VAL DATA 2BH
  31.  
  32. START BIT P0.0
  33. STOP BIT P0.1
  34. RST BIT P0.2
  35.  
  36. FLAG BIT 2AH.2
  37.  
  38. TIMER_COUNTER DATA 2CH
  39.  
  40. CNT1 DATA 30h
  41. CNT2 DATA 31h
  42. RES  DATA 32h
  43. TMP  DATA 33h
  44.  
  45. LEFT_IND BIT P3.6
  46. RIGHT_IND BIT P3.7
  47.  
  48. LEFT_IND_VAL DATA 2DH
  49. RIGHT_IND_VAL DATA 2EH
  50.  
  51. ORG 0000H
  52.    JMP INIT
  53.  
  54. ORG 000BH
  55.    JMP HANDLE_TIMER
  56. org 0013h
  57.     CLR IE1
  58.     RETI
  59.  
  60.    
  61.    
  62. ORG 0003H
  63.    JMP BUTTON
  64.  
  65. ORG 100H
  66.  
  67. ARRAY_1:
  68.    mov 60h, #0h
  69.    mov 61h, #1h
  70.    mov 62h, #6h
  71.    mov 63h, #3h
  72.    mov 64h, #4h
  73.    
  74.    ret
  75.  
  76. ARRAY_2:  
  77.    mov 65h, #2h
  78.    mov 66h, #6h
  79.    mov 67h, #7h
  80.    mov 68h, #8h
  81.    mov 69h, #9h
  82.    
  83.    ret
  84.    
  85. SSEG_MAP:
  86.    mov 40h, #00111111b
  87.    mov 41h, #00000110b
  88.    mov 42h, #01011011b
  89.    mov 43h, #01001111b
  90.    mov 44h, #01100110b
  91.    mov 45h, #01101101b
  92.    mov 46h, #01111101b
  93.    mov 47h, #00000111b
  94.    mov 48h, #01111111b
  95.    mov 49h, #01101111b
  96.    mov 4Ah, #01110111b
  97.    mov 4Bh, #01111100b
  98.    mov 4Ch, #01111001b
  99.    mov 4Dh, #11011110b
  100.    mov 4Eh, #11111001b
  101.    mov 4Fh, #11110001b
  102.    
  103.    mov 50h, #11110110b ;H
  104.    
  105.    ret
  106.  
  107. BUTTON:
  108.    JB RST, NOT_RESET
  109.    SETB FLAG
  110.    JMP INIT
  111. NOT_RESET:
  112.    JB STOP, NO_STOP
  113.    ;JNB TR0, NO_STOP
  114.    CLR TR0
  115.    ;CLR ET0
  116.    JMP DISPOSE
  117. NO_STOP:
  118.    JNB START, START_TIMER
  119.    JMP DISPOSE
  120. START_TIMER:
  121.    ;SETB ET0;
  122.    SETB TR0;
  123. DISPOSE:
  124.    RETI
  125.    
  126. INIT:
  127.  
  128.    call ARRAY_1
  129.    call ARRAY_2
  130.    call SSEG_MAP
  131.    call Find
  132.    
  133.    MOV P0, #255;
  134.  
  135.    MOV P2, #255;
  136. ;INIT INDICATOR
  137.    MOV INDIC_VAL, #0
  138.    MOV LEFT_IND_VAL, #11000000B
  139.    MOV RIGHT_IND_VAL, #11000000B
  140. ;INIT TIMER
  141.    MOV TIMER_COUNTER, #244
  142.    MOV TL0, #0
  143.    MOV TH0, #-8
  144.    MOV TMOD, #01100001B
  145.    SETB EA;Enable all interrupt
  146.    CLR TR0;Timer0 run control
  147.    SETB EX0;External interrupt
  148.    SETB EX1
  149.    SETB ET0;Timer overflow interrupt
  150.    SETB IT0;Timer control register
  151.    SETB IT1
  152. ;INIT LED
  153.    SETB RED_LED
  154.    CLR RED_ENABLE
  155.    JB FLAG, HANDLE;
  156.    JMP IND_LOOPER
  157.    SJMP $
  158.    
  159. IND_LOOPER:
  160.    CLR RIGHT_IND
  161.    MOV P2, LEFT_IND_VAL
  162.    SETB LEFT_IND
  163.    CLR LEFT_IND
  164.    MOV P2, RIGHT_IND_VAL
  165.    SETB RIGHT_IND
  166.    JMP IND_LOOPER
  167.  
  168. HANDLE_TIMER:  
  169.    MOV TH0, #-8
  170.    DJNZ TIMER_COUNTER, RETS ;decrement and if TIMER_COUNTER !=0 go to RETS
  171.    MOV TIMER_COUNTER, #244
  172.    JNB RED_ENABLE, M1; if RED_ENABLE == 0 go to M1
  173.    SETB RED_LED
  174.    CLR RED_ENABLE
  175.    INC INDIC_VAL;
  176.    JMP INDICATE;
  177.    RETI
  178.    M1:
  179.       CPL RED_LED
  180.       SETB RED_ENABLE
  181.    RETS:
  182.       RETI
  183. HANDLE:
  184.    CLR FLAG
  185.    JMP RETURN
  186. INDICATE:
  187.    MOV A, INDIC_VAL
  188.    RTRY0:
  189.    CJNE A, #0, RTRY1 ; compare a and #0 if a != 0 then go to rtry1
  190.    MOV RIGHT_IND_VAL, #11000000B
  191.    JMP RETURN;
  192. RTRY1:
  193.    CJNE A, #1, RTRY2
  194.    MOV RIGHT_IND_VAL, #11111001B;
  195.    JMP RETURN;
  196. RTRY2:
  197.    CJNE A, #2, RTRY3
  198.    MOV RIGHT_IND_VAL, #10100100B;
  199.    JMP RETURN;
  200. RTRY3:
  201.    CJNE A, #3, RTRY4
  202.    MOV RIGHT_IND_VAL, #10110000B;
  203.    JMP RETURN;
  204. RTRY4:
  205.    CJNE A, #4, RTRY5
  206.    MOV RIGHT_IND_VAL, #10011001B;
  207.    JMP RETURN;
  208. RTRY5:
  209.    CJNE A, #5, RTRY6
  210.    MOV RIGHT_IND_VAL, #10010010B;
  211.    JMP RETURN;
  212. RTRY6:
  213.    CJNE A, #6, RTRY7
  214.    MOV RIGHT_IND_VAL, #10000010B;
  215.    JMP RETURN;
  216. RTRY7:
  217.    CJNE A, #7, RTRY8
  218.    MOV RIGHT_IND_VAL, #11111000B;
  219.    JMP RETURN;
  220. RTRY8:
  221.    CJNE A, #8, RTRY9
  222.    MOV RIGHT_IND_VAL, #10000000B;
  223.    JMP RETURN;
  224. RTRY9:
  225.    CJNE A, #9, RTRY10
  226.    MOV RIGHT_IND_VAL, #10010000B;
  227.    JMP RETURN;
  228. RTRY10:
  229.    CJNE A, #10, RTRY11
  230.    MOV LEFT_IND_VAL, #11111001B;
  231.    MOV RIGHT_IND_VAL, #11000000B;
  232.    JMP RETURN;
  233. RTRY11:
  234.    CJNE A, #11, RTRY12
  235.    MOV LEFT_IND_VAL, #11111001B;
  236.    MOV RIGHT_IND_VAL, #11111001B;
  237.    JMP RETURN;
  238. RTRY12:
  239.    CJNE A, #12, RTRY13
  240.    MOV LEFT_IND_VAL, #11111001B;
  241.    MOV RIGHT_IND_VAL, #10100100B;
  242.    JMP RETURN
  243. RTRY13:
  244.    CJNE A, #13, RTRY14
  245.    MOV LEFT_IND_VAL, #11111001B;
  246.    MOV RIGHT_IND_VAL, #10110000B;
  247.    JMP RETURN;
  248. RTRY14:
  249.    CJNE A, #14, RTRY15
  250.    MOV LEFT_IND_VAL, #11111001B;
  251.    MOV RIGHT_IND_VAL, #10011001B;
  252.    JMP RETURN;
  253. RTRY15:
  254.    CJNE A, #15, RTRY16
  255.    MOV LEFT_IND_VAL, #11111001B;
  256.    MOV RIGHT_IND_VAL, #10010010B;
  257.    JMP RETURN;
  258. RTRY16:
  259.    CJNE A, #16, CLEAR
  260.    MOV LEFT_IND_VAL, #11111001B;
  261.    MOV RIGHT_IND_VAL, #10000010B;
  262.    JMP RETURN;
  263. CLEAR:
  264.    MOV INDIC_VAL, #0;
  265.    MOV LEFT_IND_VAL, #11000000B
  266.    MOV RIGHT_IND_VAL, #11000000B
  267.    JMP RETURN;
  268. RETURN:
  269.    RETI
  270.  
  271.  
  272. Find:
  273.      
  274.       mov RES, #10h
  275.       mov CNT1, #60h
  276.       FindLoop:
  277.          mov CNT2, #65h
  278.      mov R0, CNT1
  279.      mov a, CNT1
  280.          mov TMP, @R0
  281.      IntLoop:
  282.         mov R0, CNT2
  283.         mov a, R0
  284.             mov a, @R0
  285.         xrl a, TMP
  286.         jz  FindSuccess
  287.         inc CNT2
  288.         mov  a, CNT2
  289.         cjne a, #6Ah, IntLoop
  290.      inc CNT1
  291.      mov a, CNT1
  292.          cjne a, #65h, FindLoop
  293.       FindEnd:
  294.      mov a, RES
  295.      add a, #40h
  296.      mov R0,  a
  297.      mov P1, @R0
  298.      ret
  299.       FindSuccess:
  300.          mov RES, TMP
  301.      jmp FindEnd
  302.      ret
  303.      
  304.      
  305. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement