于十天学会AVR单片机的教程头文件

发布者:psi33最新更新时间:2016-05-27 来源: eefocus关键字:AVR  单片机  头文件 手机看文章 扫描二维码
随时随地手机看文章
最近开始学习AVR单片机,由于之前买的51开发板是兼容AVR单片机的,所以就没有必要开发板了。于是从网上找了一个教程《十天学会AVR单片机》,也是郭天祥公司的人讲的,觉得还可以。因为没有买开发板,所以没有AVR_PQ1A.h这个头文件,这头文件定义了寄存器等,非常好用,所以有必要下下来解读。
/*
  文件:AVR_PQ1A.H
  功能:定义一些AVR_PQ1A开发板上应用程序用到的常量
//
#include    //包含型号头文件
#include    //包含"位"操作头文件
/数据类型宏定义/
#define uchar unsigned char
#define uint unsigned int
/数码管和LED常量/
#define LEDLK PA2 //LED锁存器控制端
#define SEGLK PA3 //数码管段选锁存器控制端
#define BITLK PA4 //数码管位选锁存器控制端
#define TRUE 1
#define FALSE 0
#define ALLLED 0XFF
/*
函数名称: Delayus
功    能: 延时指定微秒(8M晶振)
参    数: US--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值  : 无
//
void Delayus(uint US)    
{
uint i;
US=US*5/4;      //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
for( i=0;i1010 or DS=00 or RS=00)
        //RAM 命令
#define C_RAMBASE                0xC0        //RAM0~RAM30<<1 地址需左移一位 


/USB常量/
#define CSUSB   PA7
#define D12_INT PD3
#define WR_N    PD4
#define RD_N    PD5
#define C_D     PD6
#define D12_CS  PD7
#define USBCTL_DDR  DDRD
#define USBCTL_PORT PORTD
#define USBDAT_DDR  DDRB
#define USBDAT_PORT PORTB
#define USBDAT_PIN PINB

#define CMD     0x01
#define DAT     0x00

#define UEN_GINT()  SREG&=~BIT(7)
#define EN_GINT()  SREG|=BIT(7)

#define MSB(x)    (((x) >> 8) & 0xFF)

#define MAX_ENDPOINTS      (uchar)0x3

#define NOLAZYCLOCK                        0x02
#define CLOCKRUNNING                        0x04
#define INTERRUPTMODE                        0x08
#define SOFTCONNECT                        0x10
#define ENDP_NONISO                        0x00
#define ENDP_ISOOUT                        0x40
#define ENDP_ISOIN                        0x80
#define ENDP_ISOIO                        0xC0

#define CLOCK_12M                        0x03
#define CLOCK_4M                        0x0b
#define SETTOONE                            0x40
#define SOFONLY                                0x80

#define NORMALPLUSSOF                        0x20
#define ENDP4INTENABLE                        0x40
#define ENDP5INTENABLE                        0x80

#define INT_ENDP0OUT                        0x01
#define INT_ENDP0IN                        0x02
#define INT_ENDP1OUT                        0x04
#define INT_ENDP1IN                        0x08
#define INT_ENDP2OUT                        0x10
#define INT_ENDP2IN                        0x20
#define INT_BUSRESET                        0x40
#define INT_SUSPENDCHANGE                0x80

#define SETUPPACKET                        0x20
#define BUFFER0FULL                        0x20
#define BUFFER1FULL                        0x40

#define FULLEMPTY                        0x01
#define STALL                                0x02

#define USB_IDLE           0
#define USB_TRANSMIT       1
#define USB_RECEIVE        2

#define MAX_CTLDAT_SIZE        8

#define USB_ENDPOINT_DIRECTION_MASK     0x80
#define USB_REQUEST_MASK         (uchar)0x0F
#define USB_REQUEST_TYPE_MASK    (uchar)0x60
#define USB_STANDARD_REQUEST     (uchar)0x00

#define DEVICE_ADDRESS_MASK      0x7F

#define USB_FEATURE_ENDPOINT_STALL          (uint)0x0000
#define USB_FEATURE_REMOTE_WAKEUP           (uint)0x0001

#define EP0_PACKET_SIZE    16
#define EP1_PACKET_SIZE    16
#define EP2_PACKET_SIZE    64

#define USB_RECIPIENT            (uchar)0x1F
#define USB_RECIPIENT_DEVICE     (uchar)0x00
#define USB_RECIPIENT_INTERFACE  (uchar)0x01
#define USB_RECIPIENT_ENDPOINT   (uchar)0x02

#define USB_DEVICE_DESCRIPTOR_TYPE                0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE         0x02
#define USB_STRING_DESCRIPTOR_TYPE                0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE             0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE              0x05
#define USB_POWER_DESCRIPTOR_TYPE                 0x06

/* 设备描述符: 测试设备类型 */
#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xdc
/*   D12 配置描述符长度  /
#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
                                                                        + sizeof(USB_INTERFACE_DESCRIPTOR) \
                                                                        + (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
/*   D12 接口描述符中: 除端点0的端点索引数目  /
#define NUM_ENDPOINTS        4
/* 设备描述符: 测试设备类型 */
#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xdc

/* 接口描述符: 子类代码 */
#define USB_SUBCLASS_CODE_TEST_CLASS_D12                    0xA0

/* 接口描述符: 协议代码 */
#define USB_PROTOCOL_CODE_TEST_CLASS_D12                    0xB0
        /*
         USB 端点描述符结构体: 端点属性
        /
#define USB_ENDPOINT_TYPE_MASK                    0x03

#define USB_ENDPOINT_TYPE_CONTROL                 0x00
#define USB_ENDPOINT_TYPE_ISOCHRONOUS             0x01
#define USB_ENDPOINT_TYPE_BULK                    0x02
#define USB_ENDPOINT_TYPE_INTERRUPT               0x03

/通用子函数/
void Delayms(uint MS);

/LED子函数/
void One_led(uchar number,uchar light);
void All_led(uchar light);
void Flow_LED(uchar MS);
void Flash_LED(uchar number,uchar MS);

/数码管子函数/
void One_smg_display(uchar data,uchar number);
void All_smg_display(uchar *pdata);
void Cycle_smg_display(uchar *pdata);

/1602液晶管子函数/
void LCD1602_portini(void);
uchar LCD1602_readbyte(uchar DatCmd);
void LCD1602_sendbyte(uchar DatCmd, uchar dByte);
void LCD1602_sendstr(uchar *ptString);
void LCD1602_clear(void);
uchar LCD1602_readBF(void);
void LCD1602_gotoXY(uchar Row, uchar Col);
void LCD1602_initial(void);

/USB函数/
void D12_init(void);
void OutB(uchar cmd,uchar dat);
uchar InB(void);
void Set_addren(uchar addr, uchar enable);
void Set_EPen(uchar enable);
void Set_mode(uchar config,uchar clkdiv);
void Set_DMA(uchar bMode);
uint Read_IntR(void);
uchar Sel_EP(uchar endp);
uchar Read_EPsta(uchar endp);
uchar Read_LttransSta(uchar endp);
void Set_EPsta(uchar endp,uchar stall);
void Set_Sresume(void);
uchar Read_EP(uchar endp,uchar len,uchar * buf);
uchar Write_EP(uchar endp,uchar len,uchar * buf);
void Ack_EP(uchar endp);
void Clear_buf(uchar endp);
void Stall_ep0(void);
void S_trans(uchar * buf, uchar len);

void Ep0_rxdone(void);
void Ep0_txdone(void);
void Ep1_txdone(void);
void Ep1_rxdone(void);
void Ep2_txdone(void);
void Ep2_rxdone(void);

void Reserved(void);
void Get_status(void);
void Clr_feature(void);
void Set_feature(void);
void Set_addr(void);
void Get_descriptor(void);
void Get_config(void);
void Set_config(void);
void Get_interface(void);
void Set_interface(void);
void USB_reconnect(void);
void Control_handler(void);
void Uart_sendB(uchar sendB);

 

注意以上是针对ATMEGA16单片机的,否则需要修改第一句#include

关键字:AVR  单片机  头文件 引用地址:于十天学会AVR单片机的教程头文件

上一篇:嵌入式学习笔记16——AVR单片机之优势
下一篇:AVR单片机特性及开发编译环境

推荐阅读最新更新时间:2024-03-16 14:55

意法半导体盘点2010:一视同仁 全面开花
2010年最大的变化是全球经济正逐步复苏。正如经济危机的突发和影响深度,市场反弹的速度和强度也是超出我们和客户的预期。市场整体复苏非常快,非常突然,但是意法半导体的业务增长依然大幅超出客户的最初预期。 在过去的一年中,我们不仅成功地克服了经济危机的影响,还改进了我们在以下诸多方面的企业状况。这对我们未来市场的增长也颇有裨益。 1)财务状况 首先,意法半导体拥有坚实的财力。在2008年底,我们的净债务约5亿美元;到2009年底,我们的现金流量超过4亿美元,反转幅度接近10亿美元。我们的财务状况比经济危机爆发时更雄厚。 其后我们的财务状况季度环比不断进步,到2010年第三季度实现净现金流量 8.78亿美元。尽管投入巨
[半导体设计/制造]
STM32单片机的IIC硬件编程---查询等待方式
IIC器件是一种介于高速和低速之间的嵌入式外围设备,其实总体来说,它的速度算是比较慢的。通常情况下,速度慢的器件意味着更多的等待,这对于精益求精的嵌入式工程师来说,简直就是一个恶梦,低速器件的存取数据实在是太浪费资源。如何面对这种低速设备,而使系统运行达到最优化?我觉得应当尽可能多的使用硬件完成,这样软件的开销便会减小,系统软件不用过多的时间去等待这些数据,而专注于硬件的请求和处理。 IIC协议,在笔者看来,其实并不是一种很好的协议,它没有较好的出错恢复机制,它是基于一种状态机模式的通讯协议,在这个状态转换中出现任意一步错误,将会导致总线不可恢复,极脆弱。在400KHZ的最高带通讯速率下,很多时候也极易产生干抗,因其采用了
[单片机]
布局高端 瞄准16/32位市场
2008 年前,瑞萨在中国 MCU 市场的产品一直以 4 位和 8 位为主,而瑞萨 RX 系列诞生,正式吹响了进军 16 位和 32 位产品生产及销售的“集结号”。 MCU :持续拓展 16/32 位市场 针对中国 MCU 市场,瑞萨制定了新的策略:通过四大战略保持并扩大在 MCU 领域的优势。首先,进一步拓展高、中、低端产品阵容;其次,凭借 Super H 实现在中国高端领域市场的飞跃;第三,面向中端领域投入 RX 系列产品;第四,在低端领域通过 Tiny 继续维持良好的发展势头。 瑞萨的 MCU 产品大量应用
[单片机]
如何破解MCU的方法及其预防措施
中央处理器CPU,包括运算器、控制器和寄存器组。是MCU内部的核心部件,由运算部件和控制部件两大部分组成。前者能完成数据的算术逻辑运算、位变量处理和数据传送操作,后者是按一定时序协调工作,是分析和执行指令的部件。 Ⅱ:存储器,包括ROM和RAM。ROM程序存储器,MCU的工作是按事先编制好的程序一条条循序执行的,ROM程序存储器即用来存放已编的程序(系统程序由制造厂家编制和写入)。存储数据掉电后不消失。ROM又分为片内存储器和片外(扩展)存储器两种。 RAM数据存储器,在程序运行过程中可以随时写入数据,又可以随时读出数据。存储数据在掉电后不能保持。RAM也分为片内数据存储器和片外(扩展)存储器两种。 Ⅲ:输入、输出
[单片机]
InfineonTLE983x智能汽车继电器驱动解决方案
Infineon公司的TLE983x是基于智能LIN和集成了8位MCU的继电器驱动器和接口电路,MCU内核为XC800系列和标准的8051核兼容,工作频率高达40MHz,具有专用功率驱动器,控制和通信模块,主要用在车窗升降,座椅,风扇控制,开关面板接口和键盘接口.本文介绍了TLE983x主要特性和优势,方框图,智能车窗升降模块框图以及评估板电路图,材料清单和PCB布局图. The TLE983x is a single chip solution that integrates a high performance 8-bit microcontroller derived from the established XC800 fa
[电源管理]
InfineonTLE983x智能汽车继电器驱动解决方案
学习AVR和PIC单片机心得
一、两种单片机工程文件编译成功的关键是工程文件名和存储目录必须是英文字母,绝对不能是 汉字目录! 否则就会出现编译错误。我就是使用了汉字目录 我的文档 在工程文件编译文件过 程产生错误,百思不得其解,浪费了许多时间。 二、学AVR单片机感觉还是用AVR STUDIO自带的GCC比较爽。一是因为AVR STUDIO 自带(不过 还要自己安装WinAVR);二是因为 WinAVR是自由软件不需要破解;三是现在用起来比以前要爽多 了,以前还要自己编写makefile文件,现在只需在project的configuration中设置一下单片机使用 晶振频率 ,剩下的就交给编译器;四是GCC 函数库比较丰富,拿来直接用省的自己编
[单片机]
使用8位MCU的物联网控制应用
使用8位MCU的物联网控制应用 追溯到20世纪70年代,单片机(MCU)在控制各种汽车、消费品和工业产品方面发挥了重要作用。如今,单片机的应用已扩展到包括便携式、无线和可穿戴物联网(IoT)产品。除了物联网以外,医疗保健行业也出现了大规模发展,各种应用中都采用了8位MCU。 具有8位MCU的嵌入式电子产品需要在规模经济中具有竞争力的设备(每个应用需要数十万甚至数百万个器件)。例如,在汽车应用中,8位MCU控制许多子系统,如电动座椅和车窗、智能门把手,甚至轮胎压力传感器。这意味着几美分的价格差相当重要。应用成本的另一方面是数百万设备的维护成本,在设计阶段通常会忽视这一点。可靠性和设备耐用性可以通过简化代码和硬件来提高,而
[物联网]
使用8位<font color='red'>MCU</font>的物联网控制应用
基于C8051F2xx系列MCU芯片实现锅炉水处理控制装置的设计
自然水中通常含有钙镁等离子,俗称硬水。在锅炉用水中需要去除水中的钙镁离子而形成软水以防止锅炉结垢。在生产中锅炉水的软化处理是一项重要的安全指标,所以,对于锅炉水处理的技术要求愈来愈高。单片机以其较高的灵活性和稳定性广泛应用在自动控制领域。本文所设计的锅炉水处理控制装置,由高低水位控制进水阀开关,选用单片机为核心,C语言编程实现循环时间电路控制。该装置已成功应用于成都富华水处理公司。 1 软水生产工艺过程及对自控系统的要求 1.1 生产工艺过程 软化水设备的工作原理是基于阳离子交换原理。水由交换柱上流下,与交换树脂中的盐离子充分接触达到把原水中的杂质、易结垢的重金属阳离子去除掉。其生产工艺大致分为下列几步:①条件满足后运行;②松
[单片机]
基于C8051F2xx系列<font color='red'>MCU</font>芯片实现锅炉水处理控制装置的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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