標(biāo)題: 《小星星》單片機(jī)匯編程序 [打印本頁(yè)]

作者: 達(dá)林    時(shí)間: 2018-11-27 10:19
標(biāo)題: 《小星星》單片機(jī)匯編程序
  1. 只有音樂(lè)發(fā)聲匯編程序,沒(méi)有加入LED燈,供參考。數(shù)據(jù)代碼已改為小星星發(fā)聲
  2. ;**********************************************
  3. ORG 0000H
  4. SJMP MAIN
  5. ORG 0BH
  6. AJMP TIME0

  7. ;*************主程序************************

  8. MAIN:        MOV SP,#60
  9. MOV TMOD,#01H        ;T0定時(shí)工作方式
  10. MOV IE,#82H        ;CPU 中斷允許,T0中斷允許

  11. START0:        MOV 30H,#00H        ;TABLE 相對(duì)地址指針
  12. NEXT:        MOV A,30H
  13.         MOV DPTR,#TABLE        ;到TABLE處取 簡(jiǎn)譜碼  節(jié)拍 碼
  14. MOVC A,@A+DPTR
  15. MOV R2,A        ;取到的簡(jiǎn)譜碼  節(jié)拍碼 暫存于R2中

  16. JZ ENDF        ;取到 00 結(jié)束

  17. ANL A,#0FH        ;否,取低四位 節(jié)拍 碼
  18. MOV R5,A        ;將節(jié)拍碼存于R5中
  19. MOV A,R2        ;簡(jiǎn)譜碼  節(jié)拍 碼 給A
  20. SWAP A        ;高4位 與 低4位 交換
  21. ANL A,#0FH        ;取簡(jiǎn)譜 碼
  22. JNZ SING        ;取到的簡(jiǎn)譜 碼不是0,則去發(fā)聲
  23. CLR TR0        ;取到0 則不發(fā)聲
  24. SJMP DLY1        ;節(jié)拍延時(shí)子程序( 隨節(jié)拍碼變化,延時(shí)時(shí)間不同)

  25. ;---------------發(fā)聲-----------------------
  26. SING:        DEC A        ;取到的簡(jiǎn)譜碼減1
  27. ;(簡(jiǎn)譜碼計(jì)數(shù)值16位數(shù)據(jù)存儲(chǔ)首地址從TABLE1 《相對(duì)地址》0處開(kāi)始放起,所以要減1)
  28. MOV 22H,A        ;存入(22H)中
  29. RL A        ;乘2 因?yàn)槿〉臄?shù)據(jù)占兩字節(jié)(16位)
  30. ;所以指針增加量要乘2

  31. MOV DPTR,#TABLE1
  32. ;...........簡(jiǎn)譜碼轉(zhuǎn)換為相應(yīng)定時(shí)器16位計(jì)數(shù)值.............
  33. MOVC A,@A+DPTR        ;到TABLE1取相應(yīng)的高字節(jié)計(jì)數(shù)值
  34. MOV TH0,A        ;高字節(jié)計(jì)數(shù)值存入TH0和(21H)中
  35. MOV 21H,A
  36. MOV A,22H        ;減1的簡(jiǎn)譜碼給A
  37. RL A        ;乘2 因?yàn)槿〉臄?shù)據(jù)占兩字節(jié)(16位)
  38. ;所以指針增加量要乘2
  39. INC A        ;A 增加 取下一個(gè)字節(jié)計(jì)數(shù)值

  40. ;...........簡(jiǎn)譜碼轉(zhuǎn)換為相應(yīng)定時(shí)器16位計(jì)數(shù)值.............
  41. MOVC A,@A+DPTR        ;到TABLE1取相應(yīng)的低字節(jié)計(jì)數(shù)值
  42. MOV TL0,A        ;低字節(jié)計(jì)數(shù)值存入TL0和(20H)中
  43. MOV 20H,A
  44. SETB TR0        ;啟動(dòng)T0定時(shí)器讓喇叭發(fā)出不同頻率聲音

  45. ;---------------節(jié)拍延時(shí)-------------------
  46. DLY1:        ACALL DELAY        ;基本單位時(shí)間為1/4拍 187ms
  47. INC 30H        ;取下一個(gè)簡(jiǎn)譜碼  節(jié)拍 碼
  48. SJMP NEXT

  49. ;---------------歌放完結(jié)束---------------
  50. ENDF:        CLR TR0        ;關(guān)閉T0定時(shí)器
  51. AJMP START0        ;反復(fù)循環(huán)


  52. ;****T0中斷子程序(用來(lái)驅(qū)動(dòng)喇叭發(fā)出不同頻率聲音)**************
  53. TIME0:        PUSH ACC
  54. PUSH PSW
  55. MOV TL0,20H        ;重裝計(jì)數(shù)值
  56. MOV TH0,21H
  57. CPL P3.7        ;驅(qū)動(dòng)發(fā)聲
  58. POP PSW
  59. POP ACC
  60. RETI


  61. ;******************節(jié)拍延時(shí)187ms****************************
  62. DELAY: MOV R7,#187        ;187ms延時(shí)子程序
  63. DLY2:        MOV R4,#02
  64. DLY3:        MOV R3,#248
  65. DJNZ R3,$
  66. DJNZ R4,DLY3
  67. DJNZ R7,DLY2
  68. DJNZ R5,DELAY
  69. RET


  70. ;*******音符T值表(用來(lái)讓定時(shí)器發(fā)出不同的頻率)**DW 表示一個(gè) 計(jì)數(shù)值 占兩個(gè)字節(jié)存儲(chǔ)單元***************

  71. TABLE1:        DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI  /中音DO 中音RE
  72. DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
  73. DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO


  74. ;*********簡(jiǎn)譜碼  節(jié)拍碼(高4位簡(jiǎn)譜碼 ,低4位節(jié)拍碼)*************

  75. TABLE:        DB 44H,44H,84H,84H          ; 1 1 5 5        
  76. DB 094H,094H,88h                           ; 6 6 5 -        

  77. DB 74H,74H,63H,63H                ;  4 4 3 3
  78. DB 52H,52H,48h                               ;  2 2 1-

  79. DB 84H,84H,74H,74H                        ; 5 5 4 4
  80. DB 64H,64H,58h                         ; 3 3 2-

  81. DB 84H,84H,74H,74H                        ; 5 5 4 4
  82. DB 64H,64H,58h                                ; 3 3 2-

  83. DB 44H,44H,84H,84H                 ; 1 1 5 5         
  84. DB 094H,094H,88h                     ; 6 6 5 -   

  85. DB 74H,74H,63H,63H                 ;  4 4 3 3
  86. DB 52H,52H,48h                         ;  2 2 1-

  87. END
復(fù)制代碼







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1