开始 A=00H Y A送到0832输出 A=00H? A=A+1 A送到0832输出 N
N A=00H? Y A=A-1
图3.3 三角波流程图
三角波产生通过A中数值的加一递升,当A中的内容加到为0时, A中的内容减一递减,从而循环产生三角波。
三角波产生子程序如下: TRIAN :MOV A ,#00H MOV DPTR,#7FFFH UP: MOVX @DPTR,A INC A JNZ UP
DOWN: DEC A
MOVX @DPTR,A JNZ DOWN RET
- 16 -
正弦波程序流程图如图3.4所示
开始 A=00H A=正弦函数表数据 A送到0832输出 DPTR1=DPTR1+1 N
A=129? Y
图3.4 正弦波程序流程图
正弦波波形设计通过查表指令得出。其产生子程序如下: SINE: MOV DPTR1,#sinTab MOV DPTR,#7FFFH LOOP: CLR A
MOVC A,@A+DPTR1 CJNE A,#129,LOOP1 RET
LOOP1: MOVX @DPTR,A INC DPTR1 AJMP LOOP
sinTab:DB 128,132,137,141,146,150,154,159,163,167 DB 171,176,180,184,188,191,195,199,203,206 DB 210,213,216,219,222,225,228,231,233,236 DB 238,240,242,244,246,247,249,250,251,252 DB 253,254,254,255,255,255,255,255,254,254 DB 253,252,251,250,249,247,246,244,242,240 DB 238,236,233,231,228,225,222,219,216,213 DB 210,206,203,198,195,192,188,184,180,176 DB 172,167,163,159,155,150,146,141,137,133 DB 128,124,119,115,111,106,102,97,93,89,85
- 17 -
DB 81,77,73,69,65,61,57,54,50,47,43,40,37 DB 34,31,28,25,23,20,18,16,14,12,10,9,7 DB 6,5,4,3,2,2,1,1,1,1,1,2,2,3,4,5,6
DB 7,9,10,12,14,16,18,20,23,25,28,30,33,36 DB 40,43,46,50,53,57,60,64,68,72,76,80,84 DB 88,93,97,101,106,110,114,119,123,128,129
方波程序流程图如图3.5所示
开始 A=00H A送到0832输出 延时 A=FFH A送到0832输出 延时
图3.5 方波程序流程图
方波产生是当A中的内容为0时,输出对应模拟量,然后延时,当A中的内容为0FFH时,同样输出对应模拟量,再延时,从而得到方波。
方波产生子程序如下:
SQUN:MOV DPTR,#7FFFH MOV A ,#0FFH MOVX @DPTR,A LCALL Delay MOV A ,#00H
MOVX @DPTR,A
- 18 -
LCALL Delay RET
延时子程序如下:
Delay: MOV R7,#10H DLY0: MOV R6,#0EDH NOP
DLY1: DJNZ R6,DLY1 DJNZ R7,DLY0 RET
方波的上限和下限的延时时间为:7ms S=1+(1+1+2×237+2)×16+1=7648us
- 19 -
第四章 测试结果
在确定编程思路以后将各部分的程序及各子程序编好,使用keil进行编译,根据提示的错误对程序进行修改。除了语法差错和逻辑差错外,当确认程序没问题时,通过直接加载到protues软件电路中进行仿真。
当按键1拨下时,波形为锯齿波,同时指示灯1发光。仿真图如图4.1所示。
图4.1 锯齿波仿真图
当按键2拨下时,波形为三角波,同时指示灯2发光。仿真图如图4.2所示。
图4.2 三角波仿真图
当按键3拨下时,波形为正弦波,同时指示灯3发光。仿真图如图4.3所示。
图4.3 正弦波仿真图
当按键4拨下时,波行为方波,同时指示灯4发光。仿真图如图4.4所示。
- 20 -