方波发生器设计 汇编语言编程

频率范围1-9999HZ,先通过3X4键盘选择方波频率,并在4位数码管上显示出来,再出单片机的并口输出该频率的方波信号,可用按键进行加减1HZ调整... 频率范围1-9999HZ,先通过3X4键盘选择方波频率,并在4位数码管上显示出来,再出单片机的并口输出该频率的方波信号,可用按键进行加减1HZ调整 展开
 我来答
晓枫X残月
2010-01-11
知道答主
回答量:17
采纳率:0%
帮助的人:7.6万
展开全部
; 控制位(三极管定义)
kzBW bit p2.6
KZSW BIT P2.5
KZGW BIT P2.4

; *******************************************

BAIW EQU 7FH ; 的总存区
SHIW EQU 7EH ;十位存区
GEW EQU 7DH ;个位存区
BBBWT EQU 6Fh
BBSWT EQU 6EH
BBGWT EQU 6DH
TTY EQU 22H

;**************************************
ORG 000H
LJMP START
ORG 001BH ;程序开头
LJMP DOS
ORG 0030H

;**************************************

; 程序初始化

START:mov r4,#0h
CLR p2.3
CLR BBBWT ;辨调时时数码管跳?
CLR BBSWT
CLR BBGWT ;辨调分时数码管跳?
MOV BAIW,#00h ;置零
MOV SHIW,#00H
MOV GEW,#00H
MOV SP,#60H
MOV 7bh,#8
mov r0,#00h
MOV TH1,75h ; 送中断初值
MOV TL1,76h
SETB EA ; 开启中断
SETB ET1
SETB TR1
;**************************************

; 主程序
MAIN: ; 调用子程序 模块化

;*************************************************************
;独立式按键程序
JJPP: LCALL XSO
JB P1.7,jzpd ;
LCALL XSO
JB P1.7,jzpd
FOO:LCALL XSO ;放松 ?
JnB P1.7,FOO
MOV TH1,#3ch ; 送中断初值
MOV TL1,#0b0h
clr p2.2 ;进入调频
INC R4
cjne r4,#4,jzpd
mov r4,#00h
MOV TH1,75h ; 送中断初值
MOV TL1,76h
jzpd:cjne r4,#1,swj
SETB BBbwT
JB P1.6,bwjy ;
LCALL XSO
JB P1.6,bwjy
ROO:LCALL XSO ;放松
JnB P1.6, roo
bwj:mov a,baiw
inc a
cjne a,#0ah,loop
mov a,#00h
loop:mov baiw,a
bwjy:JB P1.5,main ;
LCALL XSO
JB P1.5,main
RO: LCALL XSO ;放松
JnB P1.5,ro
baiwj:mov a,baiw
cjne a,#00h,fll
mov baiw,#9
ljmp swj
fll: dec baiw
swj:cjne r4,#2,gwj
clr BBbwT
setb bbswt
JB P1.6,shiwjy ;
LCALL XSO
JB P1.6,shiwjy
ROOn: LCALL XSO
JnB P1.6, roon
swjn:mov a,shiw
inc a
cjne a,#0ah,loop2
mov a,#00h
loop2:mov shiw,a
shiwjy:JB P1.5,lmain ;
LCALL XSO
JB P1.5,lmain
Rll: LCALL XSO ;放松
JnB P1.5, rll
shiwj:mov a,shiw
cjne a,#00h,flls
mov shiw,#9
ljmp gwj
flls: dec shiw
gwj:cjne r4,#3,hh
clr BBswT
setb bbgwt
JB P1.6,gewjy ;
LCALL XSO
JB P1.6,gewjy
ROOl: LCALL XSO ;放松
JnB P1.6, rool
swjnl:mov a,gew
inc a
cjne a,#0ah,loop2l
mov a,#00h
loop2l:mov gew,a
gewjy:JB P1.5,lmain ;
LCALL XSO
JB P1.5,lmain
Rlll:LCALL XSO ;放松
JnB P1.5, rlll
gewj:mov a,gew
cjne a,#00h,fllg
mov gew,#9
ljmp hh
fllg: dec gew
hh:LCALL XSO
clr bbgwt
lmain:cjne r4,#00h,jj
mov a,baiw
cjne a,#0,zzhh
mov a,shiw
cjne a,#0,zzhh
mov a,gew
cjne a,#0,zzhh
clr p2.0;上电后为0000不响 用于中断辨别
jj: ljmp main
;***************************************

zzhh:setb p2.0 ; 上电后不为0000响起 用于中断辨别
jb p2.2,jj
setb p2.2 ;退出调频 标志 调毕只走一次
mov a,baiw
mov b,#100 ;8*100+8*10+8*1=888(自动存为16进制)
mul ab
mov 60h,a
mov 61h,b

mov a,shiw
mov b,#10
mul ab
mov 62h,a
mov 63h,b
mov a,gew
mov b,#1
mul ab
mov 64h,a
mov 65h,b
mov a,60h
add a,62h
mov 70h,a
mov a,61h
addc a,63h
mov 71h,a
clr c
mov a,70h
add a,64h
mov 51h,a

mov a,71h
addc a,65h
mov 52h,a
clr c

cjne a,#00h,ddh ;1~~10hz 无法定时
mov a,51h
cjne a,#0ah,bbjj
mov th1,3ch
mov tl1,#0b0h
ljmp main
bbjj:jc xdh
ljmp ddh
xdh:mov 75h,#9eh
mov 76h,#58H
cjne a,#1,qq
mov 74h,#20
mov r5,74h
ljmp main
qq:cjne a,#2,rrr
mov 74h,#10
mov r5,74h
ljmp main
rrr:cjne a,#3,tt
mov 74h,#6
mov r5,74h
ljmp main
tt:cjne a,#4,yy
mov 74h,#5
mov r5,74h
ljmp main
yy:cjne a,#5,uu
mov 74h,#4
mov r5,74h
ljmp main
uu:cjne a,#6,ii
mov 74h,#3
mov r5,74h
ljmp main
ii:cjne a,#7,oo
ljmp main
oo:cjne a,#8,pp
mov 74h,#2
mov r5,74h
ljmp main
pp:cjne a,#9,lm
mov 74h,#2
mov r5,74h
lm:ljmp main
;***************************************************

ddh:mov r5,#00h ; xxx * 2
mov a,51h
mov b,#2
mul ab
mov 41h,b
mov 40h,a
mov b,#2
mov a,52h
mul ab
mov 43h,b
mov 42h,a
mov a,41h
add a,42h
mov 41h,a
mov a,43h
addc a,#00h
mov 43h,a

;****************************************************************
mov 54h,#40h ;56h 55h 54h/43h 41h 40h==r7 r6
mov 55h,#42h
mov 56h,#0fh
mov r6,#00h
mov r7,#00h
www:mov a,54h
subb a,40h
mov 54h,a
mov a,55h
subb a,41h
mov 55h,a
mov a,56h
subb a,43h
mov 56h,a
jc jhq
mov a,r6 ;商
add a,#01
mov r6,a
mov a,r7 ;商
addc a,#00h
mov r7,a
jnb p1.7,llm
LCALL XSO
zhycjh:ljmp www
jhq:clr c
mov a,54h
add a,40h
mov 54h,a;余数
mov a,55h
addc a,41h
mov 55h,a ;余数
mov a,56h
addc a,43h
mov 56h,a ;余数
;***************************************
mov 77h,#1h
mov 78h,#00h
mov 79h,#00h
mov a,79h
subb a,r7
mov 75h,a ;65536 - ***** 高 位
mov r1,a
mov a,78h
subb a,r6
add a,#01h
mov 76h,a ;65536 - ***** 中位
mov r2,a
mov a,77h
subb a,#00h
mov 77h,a ;65536 - ***** 底位
mov r3,a

llm: ljmp main
;***************************************

;显示子程序
XSO:JNB BBbwT,SSBTT
JB TTY,SSBTT
MOV A,#0FFH
LJMP MMM
SSBTT:MOV A,baiw
MOV DPTR,#TAB
MOVC A,@A+DPTR
MMM:MOV P0,A
CLR KZbw
DJNZ R0,$
SETB KZbw

SGT:JNB BBswT,SGBTT
JB TTY,SGBTT
MOV A,#0FFH
LJMP NNN
SGBTT:MOV A,shiw
MOV DPTR,#TABS
MOVC A,@A+DPTR
NNN:MOV P0,A
CLR KZSw
DJNZ R0,$
SETB KZSw

FST:JNB BBgwT,FSBTT
JB TTY,FSBTT
MOV A,#0FFH
LJMP LLL
FSBTT:MOV A,gew
MOV DPTR,#TAB
MOVC A,@A+DPTR
LLL:MOV P0,A
CLR KZgw
DJNZ R0,$
SETB KZgw
RET
;***************************************
;定时中断子程序

DOS:PUSH ACC
PUSH PSW
jb p2.2,eee ;辨别。
MOV TH1,#3ch
MOV TL1,#0b0h
djnz 7bh,EXIT ;给250ms 限制跳跃速度
mov 7bh,#8
CPL TTY
clr p2.3
setb p2.1
LJMP EXIT
eee:jnb p2.0,exit
mov TH1,75h
mov TL1,76h
djnz r5,exit
mov r5,74h
CPL P2.3
cpl p2.1
EXIT:POP PSW
POP ACC
RETi
;***************************************

TAB:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
TABS:DB 0c0h,0f9h,64H,70H,59H,52H,42H,0F8H,40H,50H

END
windyjack
2010-01-05 · TA获得超过372个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:86.7万
展开全部
CODE SEGMENT
ASSUME CS:CODE
ORG 10A0H
DAPORT EQU 0020H
F DW 00H ;初始化
J DB 00H
S DB 01H
ORG 10A0H
START: ;init 8255A
MOV DX,0FF2BH
MOV AL,10000001B;方式命令字,PC0~PC3输入
OUT DX,AL
;control pc
BEGIN: MOV DX,0FF2AH
IN AL,DX ;读PC口值
MOV BL,AL ;存入BL
CMP BL,02H ;"跳跃表",选择波形
JB FWAVE ;方波00~01,锯齿波02~03,三角波,04~05
CMP BL,04H
JB JWAVE
CMP BL,06H
JB SWAVE
JMP BEGIN

;FWAVE
F01: MOV F,0300H ;改变频率
JMP FDACON1

FWAVE: MOV AL,0FFH
CMP BL,01H ;选择频率
JE F01
MOV F,0400H

FDACON1:
CALL RDPC ;调用键扫子程序
MOV DX,DAPORT
OUT DX,AL
MOV CX,F
FDACO2:
LOOP FDACO2
NOT AL
JMP FDACON1

;JWAVE
JUMP1: JMP BEGIN ;充当键扫子程序 RDPC 的跳板。*.*
J01: MOV J,02H ;改变频率
JMP JDACON1

JWAVE: MOV AL,0H
CMP BL,03H ;选择频率
JE J01
MOV J,01H
JDACON1:
CALL RDPC ;调用键扫子程序
MOV DX,DAPORT
OUT DX,AL
ADD AL,J
JMP JDACON1

;SWAVE
S01: MOV AL,0H ;恢复AL为0
MOV S,02H ;改变频率
JMP L1
SWAVE: MOV AL,0H
CMP BL,05H ;选择频率
JE S01
MOV S,01H

L1: CALL RDPC ;调用键扫子程序
MOV DX,DAPORT
OUT DX,AL
ADD AL,S
CMP AL,0FCH ;若AL=0FEH则置AL=0FFH,下坡
JNA L1
MOV AL,0FFH

L2: CALL RDPC ;键扫
OUT DX,AL
SUB AL,S
CMP AL,02H ;若AL<02H,则上坡
JNB L2
JMP L1
RDPC PROC NEAR ;键扫子程序
PUSH AX
PUSH DX
MOV DX,0FF2AH ;键扫
IN AL,DX
CMP BL,AL ;有没键按下
JNE JUMP1
POP DX
POP AX
RET
RDPC ENDP

CODE ENDS
END START
1. 相关芯片介绍及初始化
DAC0832:DAC0832是一个8位的D/A转换器,由8位输入寄存器,8位DAC寄存器,8位D/A转换器及逻辑控制单元等功能电路构成。
各端口介绍: DO~D7:数字信号输入端
ILE:输入寄存器允许,高电平有效
CS:片选信号,低电平有效
WR1:写信号1,低电平有效
WR":写信号2,低电平有效
OUT1,IOUT2:DAC电流输出端
RFB:反馈电阻是集成在片内的外接运放的反馈
VREF基准电压(-10~+10)V
Vcc:电源电压(+5~+15)V
AGND:模拟地,DGND是数字地两者可接在一起使用
8255A初始化程序:
8255A控制口地址:FF2BH
A口:FF28H
B口:FF29H
C口:FF2AH
程序开始即对8255A进行初始化,并且读入PC口的数值(通过开关键进行输入),然后将读到的数值存入BL寄存器。同时判断将要输出的波形,再确认要输出的波形后,又选择该波形的频率,同时期间不断的读取PC口的数值(通过调用键扫子程序)一旦出现PC口数值变化(既有键按下)则跳到程序的开始部分重新选择波形,如此反复。
2. 子程序设计
(1).方波子程序。在该子程序里,通过控制CX寄存器的值来改变频率(周期),通过用DAC0832的数模转换功能对AL和AL的取反值的输出来实现方波的输出。
(2).锯齿波子程序。在该子程序里,通过对AL数值的增加来实现锯齿波的输出,通过数值增加的大小来改变频率。
(3). 三角波子程序。在该子程序里,通过判断AL是否小于0FCH来实现三角波上沿和下沿的输出。通过对AL值增加的大小来改变波形的频率。
(4).键扫子程序。在该子程序里,通过从PC口读入的值和之前读入的值(在BL中)的比较来判断是否有键按下。
4.调试运行
程序编写完后,开始在线路板上连线,联机编译并连接。系统显示连接失败。按实验版的复位键和键盘的复位键后重现连接,连接成功。连接成功后调试波形。开始示波器没有任何波形,仔细检查电路,发现示波器接反,随即更正.然后调出的波形是不稳定的,不停地晃动,但还是出现要求的方波、锯齿波、正弦波。
运行结果:
按“1”键, “ENTER”,输入参数,示波仪上输出方波
按“2”键, “ENTER”, 输入参数,示波仪上输出正弦波,
按“3”键,“ENTER”,输入参数,示波仪上输出锯齿波按“4”键,“ENTER”, 输入参数,示波仪输出三角波
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式