历史上的今天

今天是:2024年11月14日(星期四)

2019年11月14日 | avr单片机汇编参考程序

发布者:Jikai 来源: 51hei关键字:avr  单片机  汇编 手机看文章 扫描二维码
随时随地手机看文章

该AVR的汇编程序选自《M128》,程序中体现了AVR汇编的基本特点,仅供大家参考。

该应用系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。



                           图  简易24小时时钟硬件原理图

系统使用8个LED数码管显示时、分、秒、1/100秒4个时段的数字,每个时段占用2个LED。显示方式采用动态扫描方式,ATmega128的PA口输出显示数字的7段码(注意:图中省缺了PA口连接到LED各段的8个限流电阻,阻值800欧左右),PC口用于控制8个LED的位选。ATmega128使用外部16MHz晶振(图中未画出)。

系统还使用ATmega128片内的计数/定时器T1,设计T1工作在定时溢出中断方式,定时间隔为2ms,即T1每2ms产生一次中断。5次中断得到10ms的时间间隔,此时时钟的1/100秒加1,并相应进行时、分、秒的调整。

LED动态扫描方式的设计如下:在每2ms的时间中,点亮8个LED中的一个,显示其相应的数字(PC口的输出只有一位为低电平,选通一个LED,保持2ms)。因此PC口的输出值为0b11111110,每隔2ms循环右移,到0b01111111时8个LED各点亮一次,时间为16ms。在1秒钟内,循环8个LED的次数为62.5(1000/16),是人眼的滞留时间(25次/秒)的2.5倍,保证了LED显示亮度均匀,无闪烁。在程序设计中,在各个LED转换和7段码输出时,关闭位选信号(PC输出0b11111111),消除了显示的拖尾现象(消影功能)。

T1的设计:T1为16位定时器,系统时钟为16M,采用其64分频后的时钟作为T1的计数信号(寄存器TCCR1B = 0x03),一个计数周期为4us,2ms需要计500个(0x01F4)。由于T1溢出中断发生在0xFFFF后下一个T1计数脉冲的到来(参见第二章关于定时器原理部分),因此T1的计数初始值为0xFE0C = 0xFFFF – 0x01F3(65535-499),即寄存器TCNT1的初值为0xFE0C。


3.8.2  AVR汇编源代码

  该系统的汇编源代码如下,开发软件平台使用AVR Studio 4.08。


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


;AVR汇编程序实例


;简易带1/100秒的24小时制时钟


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


.include "m128def.inc"                ;引用器件I/O配置文件




;定义程序中使用的变量名(在寄存器空间)


.def count                =        r18        ;循环计数单元


.def position                =        r19        ;LED显示位指针,取值为0-7


.def p_temp                 =        r20        ;LED显示位选,其值取反由PC口输出


.def count_10ms        =        r21                ;10ms计数单元


.def flag_2ms                =        r22        ;2ms到标志


.def temp                        =        r23        ;临时变量


.def temp1                =        r24                ;临时变量


.def temp_int                =        r25        ;临时变量(中断中使用)




;中断向量区定义,flash空间$0000-$0045


.org $0000


        jmp reset                ;复位处理


        reti                        ;IRQ0 Handler


        nop


        reti                        ;IRQ1 Handler


        nop


        reti                        ;IRQ2 Handler


        nop


        reti                        ;IRQ3 Handler


        nop


        reti                        ;IRQ4 Handler


        nop


        reti                        ;IRQ5 Handler


        nop


        reti                        ;IRQ6 Handler


        nop


        reti                        ;IRQ7 Handler


        nop


        reti                        ;Timer2 Compare Handler


        nop


        reti                        ;Timer2 Overflow Handler


        nop


        reti                        ;Timer1 Capture Handler


        nop


        reti                        ;Timer1 CompareA Handler


        nop


        reti                        ;Timer1 CompareB Handler


        nop


        jmp time1_ovf ;Timer1 Overflow Handler


        reti                        ;Timer0 Compare Handler


        nop


        reti                        ;Timer0 Overflow Handler


        nop


        reti                        ;SPI Transfer Complete Handler


        nop


        reti                        ;USART0 RX Complete Handler


        nop


        reti                        ;USART0 UDR Empty Handler


        nop


        reti                        ;USART0 TX Complete Handler


        nop


        reti                        ;ADC Conversion Complete Handler


        nop


        reti                        ;E2PROM Ready Handler


        nop


        reti                        ;Analog Comparator Handler


        nop


        reti                        ;Timer1 CompareC Handler


        nop


        reti                        ;Timer3 Capture Handler


        nop


        reti                        ;Timer3 CompareA Handler


        nop


        reti                        ;Timer3 CompareB Handler


        nop


        reti                        ;Timer3 CompareC Handler


        nop


        reti                        ;Timer Overflow Handler


        nop


        reti                        ;USART1 RX Complete Handler


        nop


        reti                          ;USART1 UDR Empty Handler


        nop


        reti                        ;USART1 TX Complete Handler


        nop


        reti                        ;Two-wire Serial Interface Handler


        nop


        reti                        ;SPM Ready Handler


        nop                




;程序开始


.org $0046


reset: 


        ldi r16,high(RAMEND)                ;设置堆栈指针高位


        out sph,r16


        ldi r16,low(RAMEND)                ;设置堆栈指针低位


        out spl,r16


        


        ser temp                        


        out ddra,temp                                ;设置PORTA为输出,段码输出


        out ddrc,temp                                ;设置PORTC为输出,位码控制


        out portc,temp                        ;PORTC输出$FF, 无显示




        ldi position,0x00                        ;段位初始化为1/100秒低位


        ldi p_temp,0x01                        ;LED第1位亮




;初始化时钟时间为11:59:55:00


        ldi xl,low(time_buff)                ;


        ldi xh,high(time_buff)                ;X寄存器取得时钟单元首指针


        ldi temp,0x00


        st  x+,temp                                ;1/100秒 = 00

[1] [2] [3]
关键字:avr  单片机  汇编 引用地址:avr单片机汇编参考程序

上一篇:AVR单片机一些学习笔记
下一篇:最后一页

推荐阅读

华为的创新和研发实力在业界有目共睹,这次华为又研发一项黑科技,液体摄像头技术,听起来就非常高大上。 华为近日公开了新的透镜技术专利,该专利显示,华为可能正在研发一款全新的液体摄像头,从而进一步提升相机拍摄能力。 传统的相机成像一般都是两个镜头,第一个定透镜头用来感光光圈,第二个定透镜头用来调整...
gsmarena昨日给出了其为荣耀Magic Watch 2手表设计的草图,展示了一些功能细节,并表示其将与荣耀V30系列一同亮相。gsmarena称,设计师旨在将经典的手表外观与现代小工具的功能相结合,荣耀Magic Watch 2手表采用圆形表盘和2.5D玻璃设计,手表的尺寸为46mm。 值得注意的是,位于手表右侧的两个按钮也具有一些特殊功能;除了使用触摸屏控制,...
集微网报道 今日,高通方面表示,已经获得部分产品向华为供货的许可,其中包括4G产品。

史海拾趣

问答坊 | AI 解惑

有调通过marvell wifi 8686 sdio接口驱动来讨论下???

正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...…

查看全部问答∨

protel 99se中,sp232E在哪个库中?

如题。 protel 99se中,SP232E所在的库叫什么?…

查看全部问答∨

lstAdd的使用问题!

    SESSION_POS_S *pTestpos1, *pTestpos2, *pTestpos3, *pPos;     LIST *pMyList = NULL;     int NodeIndex = 0;             DPRINT("-------- lstAdd测试 -------\\n ...…

查看全部问答∨

看看我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答∨

f2812AD转换波动很大,不知是什么原因?

用电位器输出一个电压值,从我watch窗口看到的ADCresult值都在变化,变化比较大。如0xabc0,b为都会能差4,帮忙分析一下可能那里设置不对。谢谢!…

查看全部问答∨

ez430-rf2500遇到了问题。。求指点

 想请问你一下 那个ez430-rf2500为什么ed连上电池两个灯还是不闪。。ap的红灯在闪烁。。并且PC上温度只有一个ap温度显示。。就是说ed的没有反应。。好像是没有连接到网络。。后来又折腾了一下。。现在ap的红绿灯都在闪。。但是ed还是没反应。 ...…

查看全部问答∨

特权同学写的sdram控制器读出的数据全是FF?

最近在用特权同学写的sdram控制器,但是串口读出的数据全是FF,不知道出错在什么地方?用没用过调通的朋友,不吝赐教,万分感谢啊…

查看全部问答∨

高手帮忙看一下这程序

#include<reg51.h>    //  包含51单片机寄存器定义的头文件unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //数字0~9的段码unsigned char int_time ; //中断次数计数变量unsigned ...…

查看全部问答∨

Verilog HDL信号类型不一致

module main (                       ....); wire   clk1MHz; // 产生1MHz的时钟波形 // 输入为20MHz的时钟 clock_divider  instT1MHz &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved