📄 dcmotor.asm
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
//文件名: DCMotor.asm
//
//编写人: LC
//
//编写时间:2005/03/10
//
//目标器件: C8051F02x
//
//编译工具: Silicon Laboratories IDE
//
//程序说明: 此程序通过DAC的输出来驱动直流电机
//------------------------------------------------------------------------------------
// 头文件包含
//------------------------------------------------------------------------------------
$include (c8051f020.inc) // SFR declarations
//------------------------------------------------------------------------------------
// Global CONSTANTS
//------------------------------------------------------------------------------------
COUNT EQU SYSCLK / 12 /5
ORG 0
AJMP main
ORG 73H
AJMP Timer3_ISR
ORG 0100H
;延时子程序
Delay:
MOV R7, #01h
Delay1:
MOV R6, #80h
Delay0:
MOV R5, #00h
DJNZ R5, $
DJNZ R6, Delay0
DJNZ R7, Delay1
RET
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
main:
;关看门狗
MOV WDTCN,#0deH
MOV WDTCN,#0adH
LCALL PORT_Init ;初始化I/O口
LCALL Timer3_Init ;初始化定时器3
LCALL DAC_Init ;初始化D/A
SETB EA ;使能总中断
LOOP:
MOV DAC0L,#0f0H ;设置待转换的值并启动D/A转换
MOV DAC0H,#0fH
LCALL Delay
LJMP LOOP
RET
;初始化I/O口
PORT_Init:
MOV XBR2,#40H ;使能交叉开关和弱上拉
ORL P74OUT,#0ffH ;使能P1.6 (LED)推挽输出
RET
;初始化D/A
DAC_Init:
MOV REF0CN,#03H ;内部偏压发生器和电压基准缓冲器工作,基准从VREF引脚输出
ORL DAC0CN,#80H ;DAC0允许,DAC输出更新发生在写DAC0H时
RET
;初始化定时器3
Timer3_Init:
MOV TMR3CN,#00H ;停止定时器3,清定时器中断标志
;用SYSCLK/12作为时基
MOV TMR3RLH, #HIGH(-COUNT) ;装载重装载值
MOV TMR3RLL, #LOW(-COUNT)
MOV TMR3H, #0ffh ;设置重载值
MOV TMR3L, #0ffh
ORL TMR3CN,#04H ;打开定时器3
ORL EIE2,#01H ;使能定时器3中断
RET
;定时器中断服务子程序
Timer3_ISR:
ANL TMR3CN,#NOT(80H) ;清定时器3中断标志
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -