这是单缓冲的,想改成双缓冲,但是改了好多次都不行,就是两个函数可以分别在两个示波器上,求大家帮忙看看!谢谢大家啦!
单片机源程序如下:
ORG 0000H ;程序开始
MOV DPTR,#0FEFFH ;0832的地址
MOV SP,#60H ;设置堆栈
START:
JNB P1.1,SJB ;输出三角波程序
JNB P1.4,ZXB ;输出正弦波程序
SJMP START ;循环检测开关情况
RET
/**************三角波************/
SJB: MOV R6,#00H ;给R6初值
DA1: MOV A,R6 ;R6送A
MOVX @DPTR,A ;初值给地址
INC R6 ;R6的内容既初值+1
CJNE R6,#0FFH,DA1;初值到最大
DA2: DEC R6 ;R6内容既初值-1
MOV A,R6 ;R6送A
MOVX @DPTR,A ;初值给地址
CJNE R6,#00H,DA2 ;初值到最小
JB P1.1,START ;开关断开了既退出
AJMP SJB ;跳转到SJB处
/*************正弦波************/
ZXB: MOV R1,#00H ;取表格初值
LOOP1: MOV A,R1 ;在表格里取数送到指定地址
MOV DPTR,#TAB ;把DPTR指针指向表格TAB的所在的地址。
MOVC A,@A+DPTR ;将DPTR的地址加上累加器A存的偏移量,形成的新地址中的数取出给A
MOV DPTR,#0FEFFH;建立数据指针地址为0FEFFH
MOVX @DPTR,A ;传送数据时先把地址给DPTR,然后用MOVX指令把累加器A的内容传送给@DPTR
INC R1 ;加一
JB P1.4,START ;开关断开了既退出
AJMP LOOP1 ;循环
TAB: DB 080H,083H,086H,089H,08DH,090H,093H,096H
DB 099H,09CH,09FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H
DB 96H,93H,90H,8DH,89H,86H,83H,80H
DB 80H,7CH,79H,78H,72H,6FH,6CH,69H
DB 66H,63H,60H,5DH,5AH,57H,55H,51H
DB 4EH,4CH,48H,45H,43H,40H,3DH,3AH
DB 38H,35H,33H,30H,2EH,2BH,29H,27H
DB 25H,22H,20H,1EH,1CH,1AH,18H,16H
DB 15H,13H,11H,10H,0EH,0DH,0BH,0AH
DB 09H,08H,07H,06H,05H,04H,03H,02H
DB 02H,01H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,01H,02H
DB 02H,03H,04H,05H,06H,07H,08H,09H
DB 0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB 16H,18H,1AH,1CH,1EH,20H,22H,25H
DB 27H,29H,2BH,2EH,30H,33H,35H,38H
DB 3AH,3DH,40H,43H,45H,48H,4CH,4EH
DB 51H,55H,57H,5AH,5DH,60H,63H,66H
DB 69H,6CH,6FH,72H,76H,79H,7CH,80H
RET
END
|