1回答

0收藏

ADuC841的例程——正弦信号发生器

模拟/电源 模拟/电源 2274 人阅读 | 1 人回复 | 2016-03-01

  1. 实验9-2:正弦信号发生器

  2.     该程序利用DAC0产生正弦波信号。

  3.           $MOD841

  4.              SP0    EQU   50H

  5.              CLK81  EQU   P3.5

  6.              DAT81  EQU   P3.3

  7.              KEYVAL EQU   31H

  8. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  9.              ORG    0000H

  10.              LJMP   MAIN

  11.              ORG    0003H

  12.              LJMP   SERVE1

  13.              ORG    002BH

  14.              LJMP   SERVE2

  15.              ORG    0060H

  16. MAIN:   MOV    R0,#0FH

  17.            CLR    A

  18. QING:     MOV    @R0,A

  19.            DJNZ   R0,QING

  20.            MOV    SP,#SP0

  21.            MOV    R3,#0FFH

  22.            LCALL  YS

  23. ;---------------------------------------

  24.            LCALL  INI8281

  25.            LCALL  INI841

  26. HERE:     LJMP   HERE

  27. ;-------------------------------------

  28. INI841:      SETB   EA

  29.            SETB   ET2

  30.            SETB   EX0

  31.            MOV    T2CON,#00H

  32.            MOV    ADCCON1,#80H        ; 给内部参考电源上电

  33.            MOV    DACCON,#0DH                   ; DAC1清0,DAC0正常输出,设置同步更新输出,上电DAC0

  34.            RET

  35. ;----------------------------------

  36. INI8281:     SETB   CLK81

  37.            SETB   DAT81

  38.            MOV    A,#12H

  39.            LCALL  WTO81

  40.            MOV    A,#80H

  41.            LCALL  WTO81

  42.            RET

  43. ;---------------------------------

  44. SERVE1:   CLR  TR2

  45.            MOV  A,#93H

  46.            LCALL WTO81

  47.            LCALL RDKVAL

  48.            MOV   A,KEYVAL

  49.            CJNE  A,#01H,S1

  50.            LCALL FUNCTION1

  51.            LJMP  S2

  52. S1:         CJNE  A,#02H,S2

  53.            LCALL FUNCTION2

  54. S2:         RETI

  55. ;----------------------------------

  56. SERVE2:   CLR  TF2

  57. KAISHI:    INC  R3

  58.            CJNE R3,#200,DADISP

  59.            MOV  R3,#0FFH

  60.            LJMP KAISHI

  61. DADISP:   MOV  DPTR,#TAB1

  62.            MOV  A,R3

  63.            MOVC A,@A+DPTR

  64.            MOV  DAC0H,A

  65.            MOV  DPTR,#TAB2

  66.            MOV  A,R3

  67.            MOVC A,@A+DPTR

  68.            MOV  DAC0L,A

  69.            RETI

  70. ;---------------------------------

  71. FUNCTION1:MOV  RCAP2H,#0EAH

  72.           MOV  RCAP2L,#65H

  73.           MOV  TH2,#0EAH

  74.           MOV  TL2,#65H

  75.           SETB TR2

  76.           RET

  77. ;-----------------------------------

  78. FUNCTION2:MOV  RCAP2H,#0FDH

  79.           MOV  RCAP2L,#0D7H

  80.           MOV  TH2,#0FDH

  81.           MOV  TL2,#0D7H

  82.           SETB TR2

  83.           RET

  84. ;-----------------------------

  85. WTO81:     MOV         R6,#08H

  86. WAT:         CLR CLK81

  87.                    LCALL      DELAY

  88.                    SETB         CLK81

  89.                    JB     DAT81,WAT

  90.                    CLR CLK81

  91.                    LCALL      DELAY

  92.                    SETB         CLK81

  93.                    JNB  DAT81,$

  94. WTB81:     RLC A

  95.                    MOV         DAT81,C

  96.            CLR CLK81

  97.                    LCALL      DELAY

  98.                    SETB         CLK81

  99.                    LCALL      DELAY

  100.                    LCALL      DELAY

  101.                    DJNZ        R6,WTB81

  102.                    SETB         DAT81

  103.            RET

  104. ;-----------------------------------

  105. RDKVAL: CLR  CLK81

  106.                    LCALL      DELAY

  107.                    SETB         CLK81

  108.                    JB     DAT81,$

  109.            CLR CLK81

  110.                    LCALL      DELAY

  111.                    SETB         CLK81

  112.            MOV         R6,#08H

  113. RD1:     LCALL      DELAY

  114.            LCALL      DELAY

  115.            LCALL      DELAY

  116.            MOV         C,DAT81

  117.                    LCALL      DELAY

  118.                    RLC A

  119.            CLR CLK81

  120.                    LCALL      DELAY

  121.                    SETB         CLK81

  122.            DJNZ        R6,RD1

  123.            MOV         KEYVAL,A

  124.            RET

  125. ;---------------------------------

  126. DELAY:  NOP

  127.            NOP

  128.            NOP

  129.            NOP

  130.            NOP

  131.            NOP

  132.            NOP

  133.            NOP

  134.            NOP

  135.            NOP

  136.            NOP

  137.            NOP

  138.            RET

  139. ;----------------------------------------

  140. YS:              MOV         R5,#00H

  141.                    MOV         R4,#50H

  142. YS1:            DJNZ        R5,$

  143.                    DJNZ        R4,YS1

  144.                    RET

  145. ;----------------------------------------

  146. TAB1:  DB  08H,08H,08H,08H,09H,09H,09H,09H,09H,0AH,0AH,0AH,0AH,0BH,0BH,0BH,0BH,0CH,0CH

  147.        DB  0CH,0CH,0CH,0DH,0DH,0DH,0DH,0DH,0EH,0EH,0EH,0EH,0EH,0EH,0EH,0FH,0FH,0FH,0FH

  148.        DB  0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH

  149.        DB  0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0EH,0EH,0EH,0EH,0EH,0EH,0EH,0DH,0DH

  150.        DB  0DH,0DH,0DH,0CH,0CH,0CH,0CH,0CH,0BH,0BH,0BH,0BH,0AH,0AH,0AH,0AH,09H,09H,09H

  151.        DB  09H,09H,08H,08H,08H,08H,07H,07H,07H,06H,06H,06H,06H,06H,05H,05H,05H,05H,04H

  152.        DB  04H,04H,04H,03H,03H,03H,03H,03H,02H,02H,02H,02H,02H,02H,01H,01H,01H,01H,01H

  153.        DB  01H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

  154.        DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,01H,01H,01H

  155.        DB  01H,01H,02H,02H,02H,02H,02H,02H,03H,03H,03H,03H,03H,04H,04H,04H,04H,05H,05H

  156.        DB  05H,05H,06H,06H,06H,06H,06H,07H,07H,07H

  157. TAB2:DB 00H,40H,81H,0C1H,01H,40H,80H,0BFH,0FDH,3BH,79H,0B6H,0F2H,2DH,68H,0A2H,0DBH,13H

  158.        DB 49H,7FH,0B4H,0E7H,19H,4AH,7AH,0A8H,0D5H,00H,2AH,52H,79H,9EH,0C1H,0E3H,03H,21H

  159.        DB 3DH,58H,70H,87H,9CH,0AFH,0C0H,0CFH,0DCH,0E7H,0F0H,0F7H,0FCH,0FDH,0FEH,0FFH,0FCH

  160.        DB 0F7H,0F0H,0E7H,0DCH,0CFH,0C0H,0AFH,9CH,87H,70H,58H,3DH,21H,03H,0E3H,0C1H,9EH,79H

  161.        DB 52H,2AH,00H,0D5H,0A8H,7AH,4AH,19H,0E7H,0B4H,7FH,49H,13H,0DBH,0A2H,68H,2DH,0F2H

  162.        DB 0B6H,79H,3BH,0FDH,0BFH,80H,40H,01H,0C1H,81H,40H,00H,0C0H,7FH,3FH,0FFH,0C0H,80H

  163.        DB 41H,03H,0C5H,87H,4AH,0EH,0D3H,98H,5EH,25H,0EDH,0B7H,81H,4CH,19H,0E7H,0B6H,86H

  164.        DB 58H,2BH,00H,0D6H,0AEH,87H,62H,3FH,1DH,0FDH,0DFH,0C3H,0A8H,90H,79H,64H,51H,40H,31H

  165.        DB 24H,19H,10H,09H,04H,02H,01H,02H,04H,09H,10H,19H,24H,31H,40H,51H,64H,79H,90H,0A8H

  166.        DB 0C3H,0DFH,0FDH,1DH,3FH,62H,87H,0AEH,0D6H,00H,2BH,58H,86H,0B6H,0E7H,19H,4CH,81H

  167.        DB 0B7H,0EDH,25H,5EH,98H,0D3H,0EH,4AH,87H,0C5H,03H,41H,80H,0C0H,0FFH,3FH,7FH,0C0H

  168. ;===============================================      

  169. END



  170. 实验9-3:PWM信号输出

  171. 下面的程序产生固定的PWM脉宽输出,按00h键开始,按其他键结束。

  172. $MOD841

  173. CLK81       EQU P3.5

  174. DAT81     EQU P3.3

  175. KEY        EQU P3.2

  176. KEYVAL EQU 30H

  177. ;***********************

  178. ORG  0000H

  179. LJMP  MAIN

  180. ORG  0003H

  181. LJMP  SERVE

  182. ORG  0060H

  183. MAIN:                MOV  R0, #0FFH;

  184. CLR_IN_RAM: MOV  @R0, #00H

  185. DJNZ  R0, CLR_IN_RAM

  186. MOV  SP, #50H

  187. LCALL YS

  188. ;***********************初始化

  189. LCALL INI841

  190. LCALL INIWH8281

  191. ;***********************欢迎菜单

  192. LCALL WELCOME

  193. MOV 40H, #0FFH

  194. ZYS:                    LCALL YS

  195. DJNZ 40H, ZYS

  196. ;***********************清屏

  197. MOV A, #16H

  198. LCALL WTO81

  199. MOV A, #00H

  200. LCALL WTO81

  201. ;***********************

  202. START:              LJMP $

  203. ;***********************

  204. SERVE:               MOV A, #93H

  205. LCALL WTO81

  206. LCALL RDKVAL

  207. MOV A, 30H

  208. CJNE A, #00H, J1

  209. MOV CFG841, #40H           ; 选择PWM输出引脚为P3.4和P3.3,分频数为32

  210. MOV PWMCON, #13H      ; 允许PWM输出,两通道16位归零PWM选择模式

  211. MOV PWM0L, #55H          ; 写入初值

  212. MOV PWM1L, #00H          ; 写入初值

  213. MOV PWM0H, #05H                   ; 写入初值

  214. MOV PWM1H, #10H                   ; 写入初值

  215. LJMP HUIQU

  216. J1:                       MOV PWMCON, #80H

  217. HUIQU:              RETI



  218. ;********************初始化841

  219. INI841:             SETB EA

  220.                            SETB EX0

  221.                            RET

  222. ;***********************初始化WH8281

  223. INIWH8281:       SETB CLK81

  224.                   SETB DAT81

  225. MOV A, #12H

  226. LCALL WTO81

  227. MOV A, #84H;

  228. LCALL WTO81

  229. RET

  230. ;***********************欢迎界面子程

  231. WELCOME:       MOV A, #14H;

  232. LCALL WTO81

  233. MOV A, #0CH

  234. LCALL WTO81

  235. MOV A, #14H

  236. LCALL WTO81

  237. MOV A, #1BH

  238. LCALL WTO81

  239. MOV A, #14H

  240. LCALL WTO81

  241. MOV A, #2DH

  242. LCALL WTO81

  243. MOV A, #14H

  244. LCALL WTO81

  245. MOV A, #3DH

  246. LCALL WTO81

  247. MOV A, #14H

  248. LCALL WTO81

  249. MOV A, #40H

  250. LCALL WTO81

  251. RET

  252. ;***********************写入WH8281子程序

  253. WTO81:             MOV R6, #08H

  254. WAT:                 CLR  CLK81

  255.                     NOP

  256.                             NOP

  257.                     SETB CLK81

  258.                             JB DAT81, WAT

  259.                             CLR  CLK81

  260.                             LCALL DELAY

  261.                             SETB CLK81

  262.                             JNB  DAT81, $

  263. WTB81:              RLC  A

  264.                             MOV DAT81,C

  265.                     CLR  CLK81

  266.                             LCALL DELAY

  267.                             SETB CLK81

  268.                             LCALL DELAY

  269.                             LCALL DELAY

  270.                             DJNZ R6, WTB81

  271.                             SETB DAT81

  272.                     RET

  273. DELAY:              NOP

  274. NOP

  275. NOP

  276. NOP

  277. NOP

  278. NOP

  279. NOP

  280. NOP

  281. NOP

  282. NOP

  283. RET

  284. ;***********************读取键值子程序

  285. RDKVAL:          CLR CLK81

  286. NOP

  287. NOP

  288. SETB CLK81

  289. JB DAT81, $

  290. CLR CLK81

  291. LCALL DELAY

  292. SETB CLK81

  293. MOV R6, #08H

  294. RD1:                   LCALL DELAY

  295. LCALL DELAY

  296. MOV C, DAT81

  297. RLC A

  298. CLR CLK81

  299. LCALL DELAY

  300. SETB CLK81

  301. DJNZ R6, RD1

  302. MOV KEYVAL, A

  303. RET

  304. ;***********************延时程序

  305. YS:                      MOV R5, #00H

  306. MOV R4, #50H

  307. YS1:                    DJNZ R5, $

  308. DJNZ R4, YS1

  309. RET

  310. ;***********************

  311. END
复制代码


关注下面的标签,发现更多相似文章
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

荣丰宇

发表于 2016-3-3 22:18:11 | 只看该作者

这年头,汇编的,也是够少了啊!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条