2、正弦波
设置地址指针指 向正弦波数据表 根据地址指针取一 个数据送D/A转换 地址指针加1, 指向下一个数据 是 32个数取完? 否 五、参考程序 DA-1.ASM 1、锯齿波(CS连地址译码器Y2) ORG 00H
MOV DPTR, #0290H ;D/A转换器的地址 MOV A, #0 ;设置初值
START: MOVX @DPTR, A ;送出数据,进行转换 INC A ;数据加1 SJMP START
2、正弦波(CS连地址译码器Y2)DA-2.ASM ORG 00H
START: MOV R4, #0H ;R4为计数器
DA_S: MOV DPTR, #TABLE ;DPTR指向正弦波数据表 MOV A, R4 ;送正弦波数据表偏移量 MOVC A, @A+DPTR ;从数据表中取一个数据 MOV DPTR, #0290H ;DPTR指向D/A转换器的地址 MOVX @DPTR, A ;送出转换数据并启动DA转换 INC R4 ;计数器加1
CJNE R4, #32, DA_S ;判断32个数据是否送完 SJMP START
TABLE: db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh ;正弦波数据表
db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h
46
实验十七 扩展并行接口8255
(总线模式)
一、实验目的
掌握8051单片机扩展并行接口8255的方法。 掌握可编程并行接口8255的编程方法及工作原理。 二、实验内容
1.实验电路如图, 8255C口接“逻辑电平开关”K0~K7,A口接“LED显示”L0~L7。8255CS接288H~28FH.
2. 编程从8255C口输入数据,再从A口输出.
3、接线:PC7~PC0 /8255 接 K7~K0 /逻辑电平开关 PA7~PA0 /8255 接 L7~L0 /LED显示 CS /8255 接 Y1 /IO地址
三、编程提示
1、8255控制寄存器端口地址 28BH
A口的地址 C口的地址 2、参考流程图:
开 始设置8255C口输入A口输出从C口输入数据将此数据自A口输出N
288H 28AH
有键按下吗?Y结 束
47
四、参考程序
;*******************************; ;* 8255方式0的C口输入,A口输出 *; ;*******************************; IO8255A EQU 0288H IO8255B EQU 0289H IO8255C EQU 028AH IO8255KZ EQU 028BH
ORG 0000H
ORG 0100H LJMP MAIN
MAIN: MOV DPTR,#IO8255KZ ;设8255为C口输入,A口输出 MOV A,#8BH
MOVX @DPTR,A
LOOP: MOV DPTR,#IO8255C ;从C口输入一数据 MOVX A,@DPTR
48
END
MOV DPTR,#IO8255A ;从A口输出刚才自C口所输入的数据 MOVX @DPTR,A LJMP LOOP
实验十八 扩展可编程定时器/计数器8253
(总线模式)
一、实验目的
掌握8051单片机扩展可编程定时器/计数器8253的方法。 掌握可编程定时器/计数器8253的方法。 二、实验内容
按下图虚线连接电路,将计数器0、计数器1、计数器2、分别设置为方式3,分别进行2、25、40分频,用逻辑笔观察OUT1输出电平的变化。
三、编程提示 1、
8253控制寄存器地址 计数器0地址 计数器1地址 CLK0连接时钟
2、参考流程图
283H 280H 281H 1MHZ
四、参考程序
AD8253A AD8253B
EQU EQU
0280H 0281H
49
;8253计数器0地址 ;8253计数器1地址
AD8253C ADRCTRL
CSEG LJMP ORG
EQU EQU AT 0000H MAIN 0100H SP,#60H PSW,#00H DIVI2 DIVI25 DIVI40 $
0282H 0283H
;8253计数器2地址 ;8253控制寄存器地址
MAIN: MOV
MOV LCALL LCALL LCALL SJMP
;使用计数器0对CLK0时钟(1MHz)进行2分频 ;使用计数器1对CLK1时钟(OUT0)进行25分频 ;使用计数器2对CLK2时钟(OUT1)进行40分频
;对CLK0(1MHz)进行2分频子程序;使用了DPTR、ACC
DPTR,#ADRCTRL A,#16H @DPTR,A
;写8253控制寄存器
DIVI2: MOV DIVI25:
DIVI40:
MOV MOVX MOV MOV MOVX RET
;控制字:选择0号计数器,仅读/输入低字节,选择方式3 ;采用16位2进制计数器
DPTR,#AD8253A;对1M时钟CLK0进行2分频 A,#2 @DPTR,A
;对CLK1时钟(OUT0)进行25分频子程序 ;使用了DPTR、ACC MOV MOV MOVX MOV MOV MOVX RET
;对CLK2时钟(OUT1)进行40分频子程序,最终得到的频率是500HZ MOV MOV MOVX MOV MOV MOVX RET END
50
DPTR,#ADRCTRL A,#96H @DPTR,A
;写8253控制寄存器
DPTR,#ADRCTRL A,#56H
;写8253控制寄存器
;控制字: 1号,仅读/输入低字节,方式3; 16位2进制计数器
@DPTR, A DPTR,#AD8253B A,#25 @DPTR,A
;对时钟CLK1(OUT0)进行25分频
;控制字: 1号,仅读/输入低字节,方式3; 16位2进制计数器
;对时钟CLK2(OUT1)进行40分频
DPTR,#AD8253C A,#40 @DPTR,A