STC32G12K128 利用 P1.1输出方波的汇编程序

学习汇编语言,可由STC32G12K128 单片机利用 P1.1 端口输出 200 Hz 的方波开始。

方波基本知识

频率 (Frequency),周期 (Period) , 波形 (Waveform),占空比率 (Duty Cycle)是使用示波器需要知道的名词。

·  频率:表示每秒钟内完整方波的数量,单位是赫兹(Hz)。
·  周期:是一个完整方波出现所需的时间,单位是秒(s)。
·  占空比:是高电平在整个方波周期内所占的比例,通常以百分比表示。

现在编写一个汇编程序,利用 Timer1 控制 P1.1  端口输出 200 Hz 的方波。

公式:

                Time1 定时器初始值

其中:

                FOSC = 单片机系统时钟频率 = 11.0592 MHz
                f = 方波频率 (有效值由 8 Hz 至 460.8 kHz)

公式说明:

                本例子 f=200, 即是 200 Hz
                方波周期为 T s (秒) = 1/f,T = 1/200 , 即是 5 ms
                1 机器周期 = 12 系统时钟周期
                1 机器周期需时 12*(1/11059200) = 1.08507 µs
                半周期需要的机器周期 = Y = (T/2) / 1.08507 µs = 2304
                Time1 定时器初始值 = 65536 – Y  = 65536 – 2304 = 63232

为什么要 65536 – 2304 呢?因为Timer1 定时器每一个机器周期加1计数,经过 2304 个机器周期 (需时2.5 ms) 便产生一个溢出中断讯号,TF1 置”1”,当软件检测到TF1 溢出中断标志,立刻把 P1.1 端口的输出电平反转,然后把TF1置”0”,Timer1 自动重载初始值,重新计数,等待下一个溢出中断讯号。

掌握定时器1寄存器

T1_GATE:控制定时器1,置0时用作定时器。

T1_C/T:  控制定时器1,置0时用作定时器 (对内部系统时钟进行计数)。

T1_M1

T1_M0

定时器1工作模式

0

0

16位自动重载模式。当[TH1,TL1]中的16位计数值溢出时,系统会自动将内部16位重载寄存器中的重载值装入[TH1,TL1]中。

0

1

16位不自动重载模式。当[TH1,TL1]中的16位计数值溢出时,定时器1将从0开始计数。

1

0

8位自动重载模式。当TL1中的8位计数值溢出时,系统会自动将TH1中的重载值装入TL1中。

1

1

Timer1 停止工作。

TF1: Timer1 溢出中断标志。Timer1 被允许计数以后,从初值开始加1计数。当产生溢出时由硬
           件将TF1位置”1”,并向CPU请求中断,一直保持到CPU响应中断时,才由硬件清”0”  (也可
           由查询软件清”0”)。

TR1:定时器Timer1 的运行控制位。该位由软件置位和清零。当GATE (TMOD.7)=0, TR1=1 时
           就允许Timer1 开始计数,TR1=0时禁止Timer1 计数。

P1.1 输出方波

汇编程序:

$NOMOD51
#include "STC32G.INC"
	  ORG 0000H
      SETB P_SW2.7		   ; EAXFR=1 使能访问XFR
      MOV CKCON, #0	       ; 设置外部数据总线速度为最快          
      MOV WTST, #0		   ; 设置程序代码等待参数 =0时 CPU 执行程序的速度为最快
      MOV P1M0, #0
	  MOV P1M1, #0		   ; P1 设置为准双向口
      CLR AUXR.6	       ; T1x12=0, Timer1 工作在 12T 模式 (每12个时钟加1)
      SETB P1.1            ; 设定 P1.1 为输出方波端口,初始为高电平
	  MOV TMOD, #0		   ; 选择 Timer1 Mode 0定时模式 , 16 位自动重载模式
	  MOV TL1, #LOW 63232  ; 定时器重载初值
	  MOV TH1, #HIGH 63232
      CLR ET1		       ; 禁止Timer1 中断
	  SETB TR1		       ; 启动 Timer1 定时器 (TCON.6)
WAIT: JNB TF1, WAIT	       ; 等候 TCON.7 溢出 (TF1)
	  CPL P1.1		       ; 反转 P1.1, 产生方波
	  CLR TF1		       ; 清 Timer1 溢出中断标志
	  SJMP WAIT		       ; 重复

数字万用表测量值:

使用数字万用表测量P1.1 的输出频率,显示 0.200 kHz,即是 200 Hz。

示波器采样结果:

周期和频率输出正确,但正占空比 50.4%,负占空比 49.6%,反映高电平的周期略长,始终软件有些不足之处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值