第1章 AVR单片机硬件结构和运行原理1.1 AVR单片机的内部结构 3
1.2 存储器组织 5
1.3 定时器/计数器 9
1.4 AT90S8515/8535单片机的I/O口 23
1.5 中断系统 26
1.6 复位系统 34
1.7 AT90S8535单片机片内模数转换器 36
1.8 同步串行口SPI 40
1.9 异步串行口UART 46
1.10 模拟比较器 53
1.11 看门狗 55
1.12 EEPROM的读/写 58
1.13 休眠方式 60
第2章 AVR单片机指令系统 62
2.1 AVR单片机汇编器编程规定 62
2.1.1 伪指令 62
2.1.2 表达式 65
2.2 操作数及指令所涉及的对象 67
2.2.1 状态寄存器SREG 67
2.2.2 执行指令对标志位的影响 68
2.2.3 操作数寄存器和操作数 69
2.2.4 堆栈 69
2.3 寻址方式 69
2.4 算术和逻辑运算指令 72
2.4.1 加法指令 73
2.4.2 减法指令 75
2.4.3 取反指令 77
2.4.4 取补指令 77
2.4.5 比较指令 77
2.4.6 逻辑与指令 78
2.4.7 逻辑或指令 79
2.4.8 逻辑异或指令 80
2.5 转移指令 80
2.5.1 无条件转移指令 82
2.5.2 条件转移指令 82
2.6 数据传输指令 90
2.6.1 直接寻址数据传输指令 92
2.6.2 间接寻址传输指令 92
2.6.3 I/O口数据传送 94
2.6.4 堆栈操作指令 94
2.7 位操作及其他指令 95
2.7.1 移位指令 97
2.7.2 位操作指令 98
2.7.3 修改标志位指令 98
2.7.4 I/O寄存器操作指令 100
2.7.5 其他指令 101
第3章 定点运算和定点数制转换 102
3.1 软件DAA的实现方法 102
3.1.1 实现加法DAA功能子程序ADDAA和LSDAA的设计方法 103
3.1.2 实现减法DAA功能子程序SUDAA的设计方法 104
3.1.3 实现右移DAA功能子程序RSDAA的设计方法 105
3.2 定点运算子程序 105
3.2.1 多字节压缩BCD码加法子程序ADBCD4和ADBCD 105
3.2.2 多字节压缩BCD码减法子程序SUBCD4和SUBCD 106
3.2.3 乘法子程序MUL16 107
3.2.4 带舍入功能的乘法子程序MUL165 108
3.2.5 整数除法子程序DIV16 108
3.2.6 将最后余数舍入处理的除法子程序DIV165 109
3.2.7 商为规格化浮点数的除法子程序DIV16F 109
3.2.8 整数除法子程序DIV24和DIV40 109
3.2.9 整数开方子程序INTSQR 112
3.3 定点数制转换子程序 114
第4章 AVR实用程序 120
4.1 查表(子)程序 120
4.1.1 线性内插计算子程序CHETA 120
4.1.2 功能数据表格项目浏览、查找、修改程序 127
4.2 EEPROM读/写子程序 137
4.2.1 EEPROM读出子程序REEP 137
4.2.2 EEPROM写入子程序WEEP 138
4.3 输入输出子程序 139
4.3.1 时钟日历芯片OKI MSM 62×42×的读/写子程序 139
4.3.2 显示保护程序DSPRV 143
4.3.3 键处理程序DEALKY 145
4.3.4 计算键值——LED显示管理子程序DSPA和DSPY 148
4.3.5 键入数字序列左移处理子程序LSDD8 155
4.3.6 双键浏览、修改数据子程序KYIN2 158
4.3.7 通用宽行打印机检测及打印子程序LPRNT 163
4.3.8 步进电机控制程序 167
4.4 精确定时及日历时钟走时程序(电脑钟) 175
4.4.1 MCU主频4MHz用TCNT1精确定时程序 176
4.4.2 MCU主频8MHz用TCNT1精确定时程序 178
4.4.3 MCU主频4MHz用TCNT0精确定时程序 180
4.4.4 以外部时钟(32768Hz)用T/C2定时直接产生秒号程序 181
4.4.5 时钟日历走时子程序ACLK 182
4.5 通信程序 188
4.5.1 异步串行口中断接收和发送ASCII码字串程序 188
4.5.2 用外部中断配合查询接收串行ASCII码字串程序 193
4.5.3 以定时器和输出口配合用中断方式发送ASCII码字串程序 200
4.5.4 以定时器和输入口配合用中断方式接收ASCII码字串程序 205
4.5.5 主从多机通信程序 211
4.5.6 智能型RS-232与RS-485标准转换程序 216
4.5.7 高速同步串行口通信程序 218
4.5.8 模拟串行口配合74164驱动LED静态显示程序 221
4.6 脉宽调制(PWM)输出 223
4.6.1 精确定时输出占空比1∶1秒号方波 224
4.6.2 用比较匹配达到时控制输出口的方法输出PWM波形 225
4.6.3 用比较匹配达到时求反输出口的方法输出PWM波形 227
4.7 模数转换 229
4.7.1 A/D转换和自运行的PWM输出综合程序 229
4.7.2 利用模拟比较器进行A/D转换程序 232
4.8 可靠性程序 235
4.8.1 滑动平均子程序SLPAV 235
4.8.2 带外部SRAM(不断电)的8515系统断电保护程序 240
4.8.3 AT90LS8535工作于掉电模式下小系统的断电保护程序 249
4.8.4 循环冗余检测子程序CRCST 255
4.8.5 循环冗余检测演示程序 259
4.9 码制转换 261
4.9.1 ASCII码数据综合处理子程序 261
4.9.2 格雷(Gray)码与二进制数相互转换子程序 272
4.10 嵌入式系统软件设计方法 274
4.11 嵌入式系统常用优化设计方法 276
第5章 AVR浮点程序库 282
5.1 AVR浮点程序库的特点 282
5.1.1 AVR浮点程序库的设计特点 282
5.1.2 AVR浮点程序库的优点 283
5.1.3 IEEE浮点数格式 285
5.1.4 浮点数的规格化 287
5.1.5 对阶 288
5.2 基本运算子程序的设计方法 288
5.2.1 支持基本运算的辅助子程序 288
5.2.2 浮点数比较大小子程序FPCP的设计方法 289
5.2.3 浮点加法子程序FPAD的设计方法 290
5.2.4 浮点减法子程序FPSU的设计方法 291
5.2.5 浮点乘法子程序FPMU的设计方法 294
5.2.6 浮点除法子程序FPDI的设计方法 297
5.2.7 浮点数模拟手算开平方子程序FPSQ的设计方法 300
5.2.8 浮点数牛顿迭代开平方子程序FSQR的设计方法 304
5.2.9 基本运算子程序的演示程序 306
5.3 函数计算子程序的设计方法 308
5.3.1 函数计算子程序的设计总则 309
5.3.2 函数计算子程序的辅助子程序 309
5.3.3 用荷纳法计算多项式值子程序FPLN1和FPLN2 315
5.3.4 对数函数LNX及其衍生函数子程序的设计方法 317
5.3.5 指数函数EXP及其衍生函数子程序的设计方法 322
5.3.6 正弦函数sin x及其衍生函数子程序的设计方法 327
5.3.7 反正弦函数ASINX及其衍生函数子程序的设计方法 330
5.3.8 函数计算子程序的演示程序 336
5.3.9 阶乘子程序NP的设计方法 337
5.3.10 浮点数制转换 338
5.4 浮点程序应用实例 349
5.4.1 拟合直线程序 349
5.4.2 模数转换器AD7701的应用 354