AVR GCC对端口的操作指南

发布者:那是一条路都最新更新时间:2019-12-04 来源: eefocus关键字:AVR  GCC  端口  操作指南 手机看文章 扫描二维码
随时随地手机看文章

1. AVR GCC for AVR

I.I/O端口API


1. BV
用法:BV(pos);
说明:将位定义转换成屏蔽码(MASK)。与头文件io.h里的位定义一起使用。例如,置位WDTOE和WDE可表示为“BV(WDTOE) | BV(WDE)”


2. bit_is_clear
用法:uint8_t bit_is_clear(uint8_t port, uint8_t bit);
描述:如果port的bit位清零则返回1。此函数调用sbic指令,故port应为有效地址。


3.bit_is_set
用法:uint8_t bit_is_set(uint8_t port, uint8_t bit);
描述:如果port的bit位置位则返回1。此函数调用sbis指令,故port应为有效地址。


4.cbi
用法:void cbi(uint8_t port, uint8_t bit);
说明:清零port的bit位。bit的值为0~7。如果port为实际I/O寄存器,则此函数生成一条cbi指令;否则,函数生成相应的优化代码。


5.inp
用法:uint8_t inp(uint8_t port);
说明:从端口port读入8比特的数值。如果port为常数,则函数生成一条in指令;若为变量,则函数用直接寻址指令。


6.__inw
用法:uint16_t __inw(uint8_t port);
说明:从I/O寄存器读入16位的数值。此函数用于读取16位寄存器(ADC,ICR1,OCR1,TCNT1)的值,因为读取这些寄存器需要合适的步骤。由于此函数只产生两条汇编指令,因此要在中断禁止时使用,否则有可能由于中断插入到指令之间造成读取错误。


7.__inw_atomic
用法:uint16_t __inw_atomic(uint8_t port);
说明:以原子语句方式读取16位I/O寄存器的数值。此函数首先禁止中断,读取数据之后再恢复中断状态,因此可以安全地应用在各种系统状态。


8.loop_until_bit_is_clear
用法:oidoid loop_until_bit_is_clear (uint8_t port, uint8_t bit);
说明:此函数简单地调用sbic指令来测试端口port的bit位是否清零。port必须为有效端口。


9.loop_until_bit_is_set

用法:oidoid loop_until_bit_is_set (uint8_t port, uint8_t bit);
说明:此函数简单地调用sbis指令来测试端口port的bit位是否置位。port必须为有效端口。


10.outp
用法:void outp(uint8_t val, uint8_t port);
说明:将val写入端口port。如果port为常数,则函数生成一条out指令;若为变量,则函数用直接寻址指令。


11.__outw
用法:void __outw(uint16_t val, uint8_t port);
说明:将16位的val写入端口port。此函数适合于操作16位寄存器,如ADC,ICR1,OCR1,TCNT1。由于此函数只产生两条汇编指令,因此要在中断禁止时使用,否则有可能由于中断插入到指令之间造成读取错误。


12.__outw_atomic
用法:void __outw_atomic(uint16_t val, uint8_t port);
说明:将16位的val写入端口port。此函数适合于操作16位寄存器,如ADC,ICR1,OCR1,TCNT1。此函数首先禁止中断,读取数据之后再恢复中断状态,因此可以安全地应用在各种系统状态。


13.sbi
用法:void sbi(uint8_t port, uint8_t bit);
说明:置位port的bit位。bit的值为0~7。如果port为实际I/O寄存器,则此函数生成一条 sbi指令;否则,函数生成相应的优化代码。


五.看门狗API
以下函数操作看门狗。宏定义参见wdt.h。
用户可以通过起动代码初始化看门狗。WDTCR的缺省值为0。如果你希望将其设置为其他值,则需要在链接命令里加入相应的命令。使用的符号为__init_wdtcr__。如下为将WDTCR设置为0x1f的例子:


avr-ld –defsym __init_wdtcr__=0x1f
1. wdt_disable
用法:void wdt_disable(void);
说明:关闭看门狗。
2. wdt_enable
用法:void wdt_enable(unit8_t timeout);
说明:使能看门狗。看门狗溢出时间为timeout。
timeout 周期
0 16K CLK
1 32K CLK
2 64K CLK
3 128K CLK
4 256K CLK
5 512K CLK
6 1024K CLK
7 2048K CLK


3. wdt_reset
用法:void wdt_reset(void);
说明:产生喂狗指令wdr。
 
附录:AVR-GCC配置
汇编选项
选项 描述
-mmcu=name 指定目标器件
name可以为:at90s1200,at90s2313,at90s2323,at90s2333,at90s2343,at904433,at90s8515,at90s8535,atmega103,atmega161
寄存器使用
如果用户需要进行汇编与C的混合编程,必须了解寄存器的使用。


1.寄存器使用
r0  可用做暂时寄存器。如果用户汇编代码使用了r0,且要调用C代码,则在调用之前必须保存r0。C中断例程会自动保存和恢复r0。


r1  C编译器假定此寄存器内容为“0”。如果用户使用了此寄存器,则在汇编代码返回之前须将其清零。C中断例程会自动保存和恢复r1。


r2-r17,r28,r29  C编译器使用这些寄存器。如果用户汇编代码需要使用这些寄存器,则必须保存并恢复这些寄存器。


R18-r27,r30,r31 如果用户汇编代码不调用C代码则无需保存和恢复这些寄存器。如果用户要调用C代码,则在调用之前须保存。


2.函数调用规则
参数表:函数的参数由左至右分别分配给r25到r8。每个参数占据偶数个寄存器。若参数太多以至r25到r8无法容纳,则多出来的参数将放入堆栈。


返回值:8位返回值存放在r24。16位返回值存放在r25:r24。32位返回值存放在r25:r24:r23:r22。64位返回值存放在r25:r24:r23:r22:r21:r20:r19:r18。

2.Keil for MCS51

sbit LED=P1^0

关键字:AVR  GCC  端口  操作指南 引用地址:AVR GCC对端口的操作指南

上一篇:AVR_GCC程序设计基础
下一篇:AVR/Arduino定时/计数器、中断入门

推荐阅读最新更新时间:2024-11-08 11:44

两个数码管从0显示到99(ICC-AVR)
#include iom16v.h #include macros.h #define uchar unsigned char uchar table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int i) { unsigned int a; uchar b; for (a = 1; a i; a++) { for (b = 0; b 250; b++); } } void main() {uchar i,j,k; DDRB=0xff; DDRC=0xff; while(1) { for(i=0;i 10
[单片机]
STM32 PWM快速开关端口电平问题
引言 通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动,如图1所示。 图1 分析 按键稳定闭合时间长短是由操作人员决定的,通常都会在 100ms 以上,刻意快速按的话能达到 40-50ms 左右,很难再低了。抖动时间是由按键的机械特性决定的,一般都会在 10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。 方法一 在绝大多数情况下,我们是用软件即程序来实现消抖的。最简单的消抖原理,就是当检测到按键状态变化后,先等待一个 10
[单片机]
STM32 PWM快速开关<font color='red'>端口</font>电平问题
AVR 嵌入式单片机芯片的中断系统介绍
中断源和中断向量: 缺省情况下,AVR的程序存储区的最低端,即从Flash地址的0x0000开始用于放置中断向量,称做中断向量区。中断向量区大小 = 中断源个数 * 每个中断向量占据字数。对于Flash比较小的AVR处理器,每个中断向量占据一个字的空间,用于放置一条相对转移指令 rjmp(跳转范围-2K~+2K),而Flash较大的AVR,每个中断向量占据两个字空间,用于放置一条绝对转移指令 jmp,用于跳转到相应中断的中断服务程序的起始地址。 在这21个中断中,包含1个非屏蔽中断(RESET)3个外部中断(INT0、INT1、INT2)和17个内部中断。 RESET $000 INT0 $002 INT1 $004
[单片机]
AVR单片机的SPWM程序
#include //程序中现在只有SPWM产生的相关的程序,其他的程序都已经删除 #include #pragma interrupt_handler T0:17 //定时器0的溢出中断向量 unsigned int SPWM_OCR1A ={493,492,491,490,489,488,487,486,485,484, 483,482,481,479,478,477,476,475,474,473, 472,471,470,469,468,467,466,465,464,463, 462,462,461,460,459,458,457,456,455,454,
[单片机]
最便宜的AVR调试工具
AvrMon 是一种交互式的调试工具。程序执行时 , 他处于等待状态: ------------------------------------------------------------------ Waiting for uC to send break token; hit ESC to interrupt. Break token received: 1, 0x01, B00000001; program count 0x0085 ---------------------------------------------------------------- avrMon 在你需要调试的地方,加一
[单片机]
最便宜的<font color='red'>AVR</font>调试工具
电子测试仪器的分类和操作使用指南
电子测量仪器按其工作原理与用途,大致划为以下几类。 多用电表: 模拟式电压表、模拟多用表(即指针式万用表VOM)、数字电压表、数字多用表(即数字万用表DMM)都属此类。这是经常使用仪表。它可以用来测量交流/直流电压、交流/直流电流、电阻阻值、电容器容量、电感量、音频电平、频率、晶体管NPN或PNP电流放大倍数 值等。 示波器: 是一种测量电压波形的电子仪器,它可以把被测电压信号随时间变化的规律,用图形显示出来。使用示波器不仅可以直观而形象地观察被测物理量的变化全貌,而且可以通过它显示的波形,测量电压和电流,进行频率和相位的比较,以及描绘特性曲线等。 信号发生器: 信号发生器(包括函数发生器)为检修、调试电子设备和仪器时提供信
[测试测量]
STM32学习笔记 — 之GPIO端口
最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对GPIO口的简单介绍: 每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器(GPIOx_BSRR),一个16 位复位寄存器(GPIOx_BRR)和一个32 位锁定寄存器(GPIOx_LCKR)。 GPIO 端口的每个位可以由软件分别配置成多种模式。每个I/O 端口位可以自由编程,然而I/0 端口寄存器必须按32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和GPIOx_BRR 寄存器
[单片机]
日立电线株式会社开发使用40吉比特端口盒式交换机
日立电线株式会社(东京证交所代码:5812)宣布开发其APRESIA系列以太网*3交换机的太比特盒式交换机:Apresia*1 15000-64XL-PSR*2和Apresia 15000-32XL-PSR。太比特交换机Apresia 15000-64XL-PSR和Apresia 15000-32XL-PSR都将是全球首款40吉比特端口设备* 4。这些新交换机将于2011年2月底开始销售。 日立电线株式会社在2003年开发出其原始品牌的以太网交换机APRESIA系列,并已将其销售扩大至电信级广域以太网服务和企业局域网。因其高可靠性和灵活的功能开发能够始终满足客户的需要,APRESIA一直备受赞誉。企业Apresia
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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