使用HCS微控制器方案与应用.docx
- 文档编号:28907588
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:75
- 大小:1.89MB
使用HCS微控制器方案与应用.docx
《使用HCS微控制器方案与应用.docx》由会员分享,可在线阅读,更多相关《使用HCS微控制器方案与应用.docx(75页珍藏版)》请在冰豆网上搜索。
使用HCS微控制器方案与应用
1.1.1嵌入式系统与单片机
嵌入式系统的由来<通用计算机系统、嵌入式计算机系统)
单片机的含义
MCU与嵌入式系统的关系
1.1.2MCU的发展简史
发展趋势
大容量、高性能化
小容量、低价格化
外围电路内装化
8位→16位→32位→64位
1.2.1与硬件相关的术语封装(Package>
印刷电路板(PCB>
动态可读/写随机存储器(DRAM>
静态可读/写随机存储器(SRAM>
只读存储器(ROM>
Flash存储器(FlashMemory>
模拟量
开关量
1.2.2与通信相关的术语
并行通信
串行通信
串行外设接口(SPI>
集成电路互连总线I2C
通用串行总线USB
控制器局域网CAN
背景调试模式BDM
边界扫描测试协议JTAG
1.2.3与功能模块相关的术语
通用输入/输出GPIO
A/D与D/A
脉冲宽度调制器PWM
看门狗
液晶显示器LCD
发光二极管LED
键盘
1.2.4与嵌入式软件相关的术语
中断
中断服务程序
实时操作系统RTOS
µC/OS-II
临界区
1.3.1嵌入式产品的一般构成
1.3.2嵌入式产品的一般开发方法
1基本输入/输出分析
2选择MCU的基本方法
3选择评估系统并对与MCU相关的硬件进行初步评估
4设计并制作硬件系统
5进行硬件系统的模块测试
6软件系统设计
7系统测试
8进一步工作
1.4.1嵌入式系统的特点
资源受限
开发需要专用工具和特殊方法
要求较高可靠性和稳定性
有实时约束
通常极其关注成本
大多要求低功耗
专用性很强
技术含量高
具有很长生命周期
1.4.2嵌入式系统的学习建议
明确学习的目的
选择好入门的机型
必要的记忆
勤于实践
学习各种接口的原理
与时俱进,不断改进自己的学习方式
从底层抓起,一点一滴打好基础
2.1.1FreescaleHCS12系列MCU的命名规则
MC9S12Dх256BхххE
①②③④⑤⑥⑦⑧①:
产品状态
②:
存储器类型标志
③:
CPU标志
④:
系列标志
⑤:
存储空间大小及版本
⑥:
工作温度范围标志
⑦:
封装标志
⑧:
无铅组装标志
2.1.2HCS12各子系列MCU简介
系列
B系列
C系列
A系列
D系列
E系列
GC系列
H系列
NE系列
Q系列
T系列
UF系列
相同点
工作电压一般为5V
不同点
ROM大小
RAM大小
EEPROM大小
Flash容量
I/O口数
串行借口
A/D转换器
2.1.1FreescaleHCS12系列MCU的命名规则
MC9S12Dх256BхххE
①②③④⑤⑥⑦⑧①:
产品状态
②:
存储器类型标志
③:
CPU标志
④:
系列标志
⑤:
存储空间大小及版本
⑥:
工作温度范围标志
⑦:
封装标志
⑧:
无铅组装标志
2.1.2HCS12各子系列MCU简介
系列
B系列
C系列
A系列
D系列
E系列
GC系列
H系列
NE系列
Q系列
T系列
UF系列
相同点
工作电压一般为5V
不同点
ROM大小
RAM大小
EEPROM大小
Flash容量
I/O口数
串行借口
A/D转换器
2.3.1MCU性能概述
1.时钟和复位产生模块、存储器与封装形式
2.丰富的I/O接口
2.3.2运行模式
1.单片运行模式
2.扩展运行模式
2.3.3内部结构简图、引脚图及引脚功能80引脚
112引脚
2.3.4MC9S12DG128MCU的最小系统设计
2.4MC9S12DG128的存储器映像
2.5.1I/O接口的基本概念
2.5.2A口、B口、E口和K口
数据方向寄存器
分别为DDRA、DDRB、DDRE、DDRK
0:
定义输入1:
定义输出
I/O寄存器
分别为PORTA、PORTB、PORTE、PORTK
输出时,0:
输出低电平1:
输出高电平
输入时,0:
外部输入低电平1:
外部输入高电平
上拉电阻控制寄存器
PUCR
四口共用
0:
没有内部上拉电阻1:
有内部上拉电阻
2.5.3H口、J口、M口、P口、S口和T口
1.端口的寄存器
数据方向寄存器
I/O寄存器
输入寄存器
低功耗驱动寄存器
0:
输出功耗正常1:
输出功耗为正常的1/6
上拉下拉使能寄存器
0:
禁用上拉或下拉电阻1:
允许上拉或下拉电阻
上拉下拉选择寄存器
0:
上拉1:
下拉
2.端口的复用功能
T口:
接收输入捕捉功能
S口:
SCI、SPI模块关联作为通信接口
M口:
与ByteFlight、BDLC、CAN、SPI模块关联作为通信接口
P口:
与PWM、SPI模块关联作为通信接口
H口:
与SPI模块关联作为通信接口
J口:
与CAN、IIC模块关联作为通信接口
2.5.4其他I/O口
A/D口:
作为AD转换模块的模拟量输入口和外界触发脉冲的输入口
也可以做为普通输入口
3.1CPU12基本组成
3.2寻址方式
1.内在寻址方式(INH>
2.立即寻址方式(IMM>
3.直接寻址方式(DIR>
4.扩展寻址方式(EXT>
5.相对变址寻址方式(REL>
6.变址寻址方式(IDX>
7.5位偏移量变址方式
8.9位偏移量变址方式
9.16位偏移量变址方式
10.16位间接变址方式
11.自增自减变址寻址方式
12.累加器偏移变址寻址方式
13.累加器D间接寻址
3.3指令系统
1算术运算<加、减、乘、除、加1、减1、……)
2逻辑运算<与、或、异或、……)
3位操作<位测试、置位、……)
4移位<算术/逻辑/循环左/右移、……)
5程序控制<转移、比较相等转移、……)
6模糊指令
7数据传送<取数、存数、进栈、出栈、……)
8其他指令
3.3.1数据传送类指令
取数指令
存数指令
传递指令
交换指令
MOVE指令
堆栈指令
3.3.2算术运算类指令
加、减法指令
自增、自减指令
比较指令
测试指令
逻辑运算指令
清零指令
取反/求补指令
乘/除法指令
最大/最小值指令
乘积累加指令
记忆标志位:
C—进/借位标志
V—溢出标志
H—加法半字节进位标志
N—正负标志位
Z—零标志位
3.3.3位操作类指令位测试指令BITA、BITB
位置1指令BSET
位清零指令BCLR
3.3.4移位类指令
算术左移 逻辑左移 算术右移 逻辑右移 循环左移 循环右移 协助记忆: 算术: Arithmetic 逻辑: Logic 左: Left 右: Right 循环: Rotate 3.3.5程序控制类指令 短转移指令<地址偏移量: -128~+127) 长转移指令<地址偏移量: -32768~+32767) 位条件转移指令<地址偏移量: -128~+127) BRCLR BREST 循环控制指令 跳转指令 无条件转移JMP 绝对转移调用JSR 相对转移调用BSR 3.3.6模糊指令 MEM REV REVW WAV 3.3.7其他指令 表插补指令 中断指令 变址操作指令 指针和变址计算指令 条件码指令 停止与等待模式指令 后台模式与空操作 3.4CPU12与CPU08的比较 3.5.1HCS12汇编源代码格式 基本概念 编译器 伪指令 语句元素 标号 操作码 操作数<常数、#、圆点) 注释 3.5.2MT-IDEforHCS12开发环境中的汇编伪指令变量定义 A1: .balign1 A2: .balignw1 数字常数与字符串常数定义 常数赋值与文本替代符伪指令 .definePI=3.14 存储定位伪指令 文件包含伪指令 .include 3.5.3CodeWarriorforHCS12开发环境中的汇编伪指令 变量定义 LABEL1: DS.B1 LABEL2: DS.W1 数字常数与字符串常数定义 常数赋值与文本替代符伪指令 PI: EQU3.14 存储定位伪指令 文件包含伪指令 INCLUDE MT-IDEforHCS12集成开发环境 简称MT环境 Freescale公司 CodeWarriorforHCS12集成开发环境 简称CW环境 4.1.1MT-IDEforHCS12集成开发环境 4.1.2CodeWarriorforHCS12集成开发环境 4.2.1嵌入式系统项目文件组织 4.2.2列表文件(*.LIS或*.LST> 列表文件的行内容格式: 4.2.3目标代码文件(*.S19> 目标代码文件是以S记录<八种)格式表示的机器码文件 4.2.4与链接相关的地址信息文件 4.3.1小灯闪烁汇编项目在MT环境下的文件组织 1与芯片相关的程序文件 DG128ASM.h--定义芯片映像寄存器名 Vector.s--定义中断向量表 Isr.s--中断处理子程序 Start12.s--系统启动文件 MCUInit.h--芯片初始化头文件 MCUInit.s--芯片初始化文件 2硬件对象控制文件 LED.h–小灯控制引脚宏定义 包含小灯驱动所需头文件 小灯控制引脚宏定义 小灯驱动子程序声明 LED.s–小灯驱动子程序 定义子程序LEDInit: 初始化 定义子程序LED_L_A: 驱动小灯"亮","暗" 3通用程序文件 Includes.h–总头文件 项目中用到的头文件 有关常量命名 GeneralFun.s–通用子程序 定义子程序DelayX: 延时 4主程序文件 main.s–主程序 项目描述 包含总头文件 主程序 内部直接调用子程序 子程序编写规范<以LED.s为例) 4.3.2MT环境下第一个汇编项目的链接信息文件链接信息文件linker.ld 链接有两种模式 内存直接模式 内存扩展模式 4.3.3MT环境下第一个汇编项目的执行过程 4.4.1小灯闪烁C项目在MT环境下的文件组织 4.4.2MT环境下第一个C项目的链接信息文件 链接信息文件linker.ld 内容与汇编链接信息相同 4.4.3MT环境下第一个C项目的执行过程 4.5.1小灯闪烁汇编项目在CW环境下的文件组织 4.5.2CW环境下第一个汇编项目中的链接信息文件 4.5.3CW环境下第一个汇编项目的执行过程 4.6.1小灯闪烁C项目在CW环境下的文件组织4.6.2CW环境下第一个C项目中的链接信息文件 4.6.3CW环境下第一个C项目的执行过程 4.6.1小灯闪烁C项目在CW环境下的文件组织4.6.2CW环境下第一个C项目中的链接信息文件 4.6.3CW环境下第一个C项目的执行过程 映像寄存器名 C项目中调用汇编语句的格式 中断函数的声明 5.1.1基本概念 1.异步串行通信的格式(NRZ> 2.串行通信的波特率 定义: 每秒内传送的位数。 单位: b/s或bps 常用: 1200bps、4800bps、9600bps…… 3.奇偶校验 奇校验: 校验位为0或1,使得1的数目是奇数 偶校验: 校验位为0或1,使得1的数目是偶数 4.串行通信的传输方式 单工: 1根数据线 全双工: 2根数据线 半双工: 1根数据线 5.1.2RS-232C总线标准 1.采用负逻辑 逻辑“1”: -15V~-3V 逻辑“0”: +3V~+15V 2.传输距离≤30m,通信速率≤20Kbps 3.接口 9芯、25芯 地线、发送数据线、接收数据线 5.2.1SCI的外围硬件电路 5.2.2SCI的基本编程原理 SCI的主要功能是: 接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部; 发送时,把需要发送的一个字节的并行数据转换为单线输出。 5.3.1SCI波特率寄存器 根据波特率设置寄存器的公式: BR=fBUS/(16×Bt> 举例: 总线频率fBUS=19.6608MHz, 定义波特率Bt=9600(针对SCI0> SCI0BDL=0x80。 //须先给低8位赋值 SCI0BDH=0x00。 //再给高5位赋值 5.3.2SCI控制寄存器1 缩写: SCI0CR1、SCI1CR1 位定义: 举例: 设置允许SCI、正常码输出、8位数据、无校验 SCI0CR1=Ox00; 5.3.3SCI控制寄存器2 缩写: SCI0CR2、SCI1CR2 位定义: 举例: 设置允许发送、允许接收,查询方式收发 SCI0CR2=0x0C。 5.3.4SCI状态寄存器1 缩写: SCI0SR1、SCI1SR1 位定义: 只读 常用: D7=1: 可以发送数据;D7=0: 不可以发送数据,需等待 D5=1: 可以取出数据;D5=0: 不可以取出数据,需等待 5.3.5SCI状态寄存器2 缩写: SCI0SR2、SCI1SR2 位定义: 只读 常用: D0=1: 正在接收数据; 5.3.6SCI数据寄存器 缩写: SCI0DRH、SCI0DRL、SCI1DRH、SCI1DRL 位定义: 5.4.1SCI初始化 5.4.2发送一个数据与接收一个数据 5.5.1串行通信子函数SCI.h: 串行通信头文件 串行通信寄存器及标志位定义 串行通信相关函数声明 SCIInit.c: 串行口SCI0初始化函数 voidSCIInit(void> SCI.c: 串行发送与接收通用子函数 voidSCISend1(INT8Uo> voidSCISendN(INT8Un,INT8Uch[]> INT8USCIRe1(INT8U*p> INT8USCIReN(INT8Un,INT8Uch[]> 5.5.2查询方式收发测试项目 查询方式收发测试项目主函数文件main.c 中断方式测试项目辅助工具 中断方式HCS12C语言主程序 串行中断子函数声明(isr.h> #ifndefISR_H//避免重复定义 #defineISR_H voidISR_Receive(void>。 //接收中断函数声明 void__attribute__((interrupt>>ISR_Empty(void>。 void_start(void>。 //复位函数(StartCode.s中定义,特殊> //芯片开关总中断的宏定义 #defineENABLE_INTERRUPTS__asm__("cli">//开中断 #defineDISABLE_INTERRUPTS__asm__("sei">//关中断 //开关各模块中断的宏定义 //开放或禁止SCI0的接收中断的宏定义 #defineEnableSCIReIntSCI0CR2|=0x20//开放SCI0接收中断 #defineDisableSCIReIntSCI0CR2&=0xDF//禁止SCI0接收中断 #endif 串行中断函数(isr.c> //ISR_Receive: SCI0接收中断函数 void__attribute__((interrupt>>ISR_Receive(void> { INT8Ui。 INT8USerialBuff[1]。 //存放接收数据的数组 DISABLE_INTERRUPTS。 //关总中断 i=SCIReN(1,SerialBuff>。 //等待接收1个数据 if(i==0>SCISendN(1,SerialBuff>。 //发送接到的数据 ENABLE_INTERRUPTS。 //开总中断 } //ISR_Empty: 空中断函数定义 void__attribute__((interrupt>>ISR_Empty(void> { } 5.6.1将串口端用作电源5.6.2握手5.6.3唤醒功能 空闲线唤醒 地址标志唤醒 6.1.1键盘模型及接口 键盘模型(通、断> 键盘接口: 独立式键盘、矩阵式键盘 6.1.2键盘的基本问题 键的识别 抖动问题 重键问题 键值计算方法<以符号“1”为例) 6.2.1键盘函数定义头函数(KB.h> //键盘扫描识别寄存器及标志位定义 #defineKB_PPTH//键盘接在PTH口上 #defineKB_DDDRH//相应的方向寄存器 #defineKB_PEPERH//相应的上拉下拉电阻允许寄存器 #defineKB_PSPPSH//相应的极性选择寄存器 #defineKB_IEPIEH//相应的中断允许寄存器 #defineKB_IFPIFH//相应的中断标志寄存器 ///键盘扫描识别函数声明 voidKB_Init(void>。 //键盘初始化 INT8UKB_Scan1(void>。 //扫描读取键值 INT8UKB_Def(INT8UKB_valve>。 //键值转为定义值 INT8UKB_ScanN(INT8UKB_count>。 //多次扫描键盘 6.2.2键盘函数定义(KB.c> 键盘初始化的函数 voidKB_Init(void> 扫描一次读取键值的函数 INT8UKB_Scan1(void> 扫描KB_count次读取键值的函数 INT8UKB_ScanN(INT8UKB_count> 将键值KB_valve转为定义值的函数 INT8UKB_Def(INT8UKB_valve> 6.2.3测试项目的主函数(main.c> 6.3.1扫描法LED显示编程原理8段数码管由8个发光二极管 需有8位(即1个字节>数据来控制各个位段的亮灭 6.3.1扫描法LED显示编程原理 6.3.2接口实例 6.3.3数码管HCS12C语言实例1.LED函数定义头文件 2.LED函数定义文件 4连排LED初始化函数 voidLEDInit(void> 在4连排LED上显示以Buf为首地址的4个数据 voidLEDShow(INT8U*Buf> 在第i个LED上显示数字c voidLEDShow1(INT8Ui,INT8Uc> 3.测试项目的主函数 第1步: 禁止总中断 第2步: 芯片初始化 第3步: SCI模块初始化、LED控制引脚初始化 第4步: LED初始显示“0123” 第5步: 开放SCI接收中断 第6步: 开放总中断 第7步: 若正确收到数据,刷新显示缓冲区 第8步: 转第7步 6.4.1LCD的特点 低电压微功耗 平板型结构 使用寿命长 被动显示 显示信息量大且易于彩色化 无电磁辐射 6.4.2LCD的分类 按电光效应分类 电场效应类 电流效应类 电热写入效应类 热效应类 按显示内容分类 字段型 点阵字符型 点阵图形型 按LCD的采光方式分类 带背光源 不带背光源 6.5.1点阵字符型液晶显示模块的基本特点 字符群: 5×8或5×11点阵块 主控制电路: HD44780 内部具有字符发生器 自定义字符RAM 数据显示RAM 标准接口特性 模块结构紧凑、轻巧、装配容易。 单+5V电源供电 低功耗、高可靠性。 6.5.2HD44780的引脚与时序---引脚 6.5.3HD44780的编程结构 1.指令寄存器(IR> 2.数据寄存器(DR> 3.忙标志(BF> 4.地址计数器(AC> 5.显示数据寄存器(DDRAM> 6.字符发生器ROM(CGROM> 7.字符发生器RAM(CGRAM> 6.5.4HD44780的指令集 点阵字符型LCD编程 6.6.1LCD函数定义头文件(LCD.h> 液晶显示寄存器及标志位定义 液晶显示相关函数声明 6.6.2LCD函数定义(LCD.c> 初始化LCD函数 voidLCDInit(void> HD44780显示屏显示str所指向的32个数据 voidLCDShow(INT8Ustr[]> 执行给定的cmd命令,且延时 voidLCD_Command(unsignedcharcmd> 6.6.3测试项目的主函数 第1步: 定义初始显示缓存并赋初值 第2步: 禁止总中断 第3步: 芯片初始化 第4步: 串行口初始化、LCD初始化 第5步: 开放总中断 第6步: LCD显示初始化 第7步: 若正确收到32个数据,则显示到LCD 第8步: 转第7步 7.1.1功能描述 7.1.2SPI模块的I/O引脚从机选择引脚 主出从入引脚MOSI 主入从出引脚MISO SPI串行时钟引脚SPSCK 7.2.1SPI模块的寄存器 7.2.2SPI编程基本方法 SPI初始化 第1步: 写控制字到SPICR,确定是否允许SPI接收中断、SPI的工作方式、时钟极性、时钟相位、是否允许SPI等。 第2步: 写控制字到SPISCR,确定SPI的波特率。 发送与接收1字节数据 通过SPI发送1字节数据 voidSPISend1(INT8USendData> 通过SPI接收1字节数据 INT8USPIRev1(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 HCS 控制器 方案 应用