CPU 寄存器
累加器 (A)
索引寄存器(H:X)
堆栈指针(SP)
16位地址指针寄存器指向下一个有效的堆栈位置。堆栈可以放置在
包含RAM的 64 Kbyte地址空间的任意位置,其大小可以为任何RAM
中的有效值。堆栈用来自动保存子程序调用的返回地址、中断中CPU
寄存器和局部变量的返回地址。AIS(立即加堆栈指针,堆栈处理指令)
指令对SP加上一个8位有符号立即数。这经常用于对堆栈中的局部
变量分配和取消分配空间。
向上生长型(如51单片机)
特性:先加后压,先弹后减
向下生长型(飞思卡尔单片机)
特性:先压后减,先加后弹
程序计数器(PC)
条件代码寄存器(CCR)
寻址模式
寻址模式定义为CPU访问操作数和数据的方法。
对于BRCLR,BRSET, CBEQ和DBNZ,在指令设置表格中列出的寻址模
式是用于访问测试操作数的寻址模式,访问分支目的则需要使用相关
寻址模式。
S08的指令的寻址方式可以分为以下几类:
1.隐含寻址(Inherent)
2.立即寻址 (Immediate)
3.直接寻址 (Direct)
4.扩展寻址 (Extended)
5.变址寻址 (Indexed)
?无偏移量,8位,16位偏移量
6.相对寻址(Relative)
7.存储器到存储器寻址方式(Memory to Memory)
存储器到存储器的寻址方式
1.立即数到直接寻址
2.直接寻址到直接寻址
3.自动变址寻址到直接寻址
4.直接寻址自动变址寻址
__________________________________________________________
中断系统
微机的输入输出方式
一.无条件传送方式
二.查询传送方式(条件传送方式)
查询式传送的优点:通用性强,硬件结构简单。
缺点:查询时占用CPU,效率低。
三.中断传送方式
串行通信与并行通信
并行通信:数据的各位(bit)同时进行传送。
优点:传送速度快
缺点:需用传送线多,不适于远距离传送,
串行通信:数据的各位逐个按顺序传送。
优点:需用传送线少,适于远距离传送。
缺点:传送速度较低。
串行通信的传输制式
单工:数据只能单方向传送(发送或接收)。
半双工:数据可以双向传送,但只有一个通信回路,故不能同时发送
和接收。
全双工:数据可以同时双向传送,具有两个独立的通信回路。
异步通信与同步通信
异步通信:通信双方无统一的时钟脉冲控制。数据以“帧”(frame)
为单位传送。
帧格式:起始位、数据位、奇偶校验位、停止位。
同步通信:传送双方有统一时钟脉冲协调同步。数据以帧为单位传送。
帧格式:同步字符、(1-2个,1个一般用ASCII码SYNC-16H,
2个一般用国际通用码EB90H)数据字符、(个数不限,一般用ASCII
码)、校验字符(1-2个)
波特率:每秒钟传送的二进制代码的位数,单位为b/S,即
bps
串行通信协议(异步通信)
⑴.起始位:信号线上无数据传送时为1开始传送时发一个0信号,
即起始位。
⑵.数据位:紧接起始位之后,个数一般为7-8位。
⑶.奇偶校验位:紧接数据位之后。一般为1位。
奇校验:数据位与奇偶位中1的总个数为奇数。
偶校验:数据位与奇偶位中1的总个数为偶数。
⑷.停止位:一帧数据的结束标志,一般为“1”。
___________________________________________________________
串行外围接口SPI原理及应用
QG8的SPI特点
1、主从模式可选
2、全双工或单线模式可选
3、可编程波特率
4、收发双缓冲
5、时钟相位与极性可选
6、从机片选输出
7、高或低位在前传送模式可选。
____________________________________________________________
寄存器
键盘中断寄存器(KBI)
八位定时模块(MTIM)
该计数器为只读,写入任何数值对其没有影响,复位时为0x00。
⑷ MTIM模寄存器——MTIMMOD
该8位可读写的寄存器保存的数值是计数器计数的最大值,当计数器
计数到该最大值时会翻转到0,同时设置TOF标志。如果给该寄存器写
入数值0x00,会导致计数器成为一个没有约束的自由运行的计数器,
给MTIMMOD写入数值回导致计数器回0x00,而且溢出标志TOF也会清
零。MTIMMOD复位时为0x00。
十六位定时模块(TPM)
TPM计时寄存器高位TPMCNTH:
TPM计时寄存器低位TPMCNTL:
⑶定时器模寄存器——TPMMODH:TPMMODL
TPM模寄存器高位TPMMODH:
TPM模寄存器低位TPMMODL:
该可读/写寄存器定义了计数器的最大数值。
读取该寄存器将返回从接收数据缓冲器中读取的数据。写该寄存器将
会把数据写入发送数据缓冲器。
当 SPI 被配置为主模式时,写入数据到传输数据缓冲器发起一次 SPI
传输,即启动SPI。
一、I/O口输入输出实验
实验内容
⑴结合开发板电路图,用跳线
夹连接对应LED引脚。即LED1、
LED2分别与PTB6、PTB7相连接。
将PTB口定义为输出接口。对端
口写0即可点亮LED灯。单步运
行观察实验现象。
⑵结合开发板电路图,用跳线
夹再将开发板上的按键SW1、SW2
连到PTA2。将PTA口定义为输入
口,将PTB口定义为输出口。按
下SW1时点亮LED1、LED2。按下
SW2时熄灭LED1、LED2。
参考程序
⑴直接点亮LED灯,其参考程序
如下。
C语言程序:
#include
#include "derivative.h"
/* 头文件 */
void main(void) {
PTBDD=0xff; /*
定义PTB口为输出口 */
PTBD=0xff; /*
输出高电平,LED灯灭*/
PTBD=0x00; /*PTB口输
出低电平,即PTB6、PTB7输出低
电平 */
for(;;)
{ __RESET_WATCHDOG(); /* 清看
门狗 */
}
/* 死循环 */
}
⑵按键控制LED灯
参考C语言程序如下:
#include
#include "derivative.h"
/* 头文件*/
void main(void) {
PTADD=0x00;
/* 初始化PTA口,定义为输入口
*/
PTBDD_PTBDD6=1;
PTBDD_PTBDD7=1;
/* PTB6,PTB7定义为输出口*/
PTBD_PTBD6=1;
PTBD_PTBD7=1;
/* PTB6,PTB7均写为1,开始时
灯熄灭 */
for(;;) {
if(PTAD_PTAD2==0)
{
PTBD_PTBD6=0;
PTBD_PTBD7=0;
}
else
if(PTAD_PTAD3==0)
{
PTBD_PTBD6=1;
}
else
__RESET_WATCHDOG(); /* 清看门
狗 */
}
}
二、键盘中断实验
实验内容
使能KBIP2、KBIP3,进而对LED1、
LED2进行控制。实现当按下SW1
时,LED1亮、LED2灭,当按下SW2
时,LED1灭、LED2亮。在中断函
数入口处设置断点,单步运行观
察实验现象。
参考程序
#include
EnableInterrupts macro */
#include "derivative.h" /*
include peripheral
declarations */
void main(void) {
DisableInterrupts;
/*关中断总允许 */
PTADD_PTADD2=0;
PTADD_PTADD3=0;
/*PTA2、PTA3定义为输入口*/
PTBDD_PTBDD6=1;
PTBDD_PTBDD7=1;
/*PTB6、PTB7定义为输出口*/
PTBD_PTBD6=1;
PTBD_PTBD7=1;
/*LED灯均熄灭*/
KBISC_KBIE=0;
KBIES=0x00;
/*下降沿/低电平触发*/
KBIPE=0x0C;
/*键盘中断开启即KBIP2、KBIP3
键盘中断开启*/
KBISC_KBACK=1;
/*清除任何错误中断*/
KBISC_KBIE=1;
/*键盘中断允许*/
EnableInterrupts;
/* 开中断总允许*/
for(;;) {
__RESET_WATCHDOG();
}
}
void interrupt 18 Keyboard( )
{
KBISC_KBACK=1;
KBISC_KBIE=0;
/*禁止键盘中断*/
if(PTAD_PTAD2==0){
PTBD_PTBD7=1;
}
else if(PTAD_PTAD3==0) {
PTBD_PTBD6=1;
PTBD_PTBD7=0;
}
else __RESET_WATCHDOG();
KBISC_KBIE=1;
/*开启键盘中断*/
}
三、定时器实验
实验内容
⑴按照查询法,利用8位定时模
块——MTIM进行定时,使得LED
灯实现亮3秒、灭3秒、亮3秒、
灭3秒……无限循环的现象。
⑵采用中断法,利用16位TPM模
块编程,实现LED灯出现亮2秒、
灭2秒、亮2秒、灭2秒……无
限循环的现象。
⑶利用TPM的PWM模块,在通道0
处产生边沿排列方式的方波,周
期为1ms,占空比为25%。用示波
器观察并记录波形。
⑷利用TPM的PWM模块,在通道1
处产生中心排列方式的方波,周
期为1ms,占空比为25%。用示波
器观察并记录波形。
参考程序
⑴查询法8位定时模块(MTIM)
定时的参考程序。本程序采用内
部总线时钟(4MHZ),并64分频,
定时器溢出值为0xFA,外部采用
最大值为750的一个递减循环。
750*64*250/4M=3秒。
#include
#include "derivative.h"
int a;
/*定义循环参数*/
void main(void)
{
DisableInterrupts;
/*禁止中断*/
PTBDD=0xff;
PTBD=0xff;
/*初始化B口*/
a=750;
MTIMCLK=0x06;
/*采用内部总线时钟,且64分频
*/
MTIMMOD=0x0FA;
MTIMSC=0x20;
/*启动定时器 */
while(1)
{
__RESET_WATCHDOG();
{
MTIMSC_TOF=0;
a-=1;
if(a==0)
{
a=750;
PTBD=~PTBD;
}
}
}
}
⑵中断法16位定时模块(TPM)
的参考程序。本程序采用内部总
线时钟,并128分频,定时器溢
出值为0xF424(十进制为
62500),62500*128/4M=2秒。
#include
#include "derivative.h"
void main(void) {
EnableInterrupts;
PTBDD=0xff;
PTBD=0xff;
TPMMODL=0x24;
TPMMODH=0x0f4; /*
定时2秒*/
TPMSC=0x4f; /*
开中断,采用内部总线时钟,并
128分频 */
for(;;) {
__RESET_WATCHDOG();
}
}
void interrupt 7 TPM(){
PTBD=~PTBD;
/*B口送低电平,点亮LED1和
LED2*/
TPMSC_TOF=0;
/*清中断标志 */
}
⑶利用TPM模块边沿排列方式产
生1ms方波,占空比为25%。采用
内部总线时钟,分频数为1,模寄
存器值为0x0FA0(十进制为4000),
通道0 的通道值寄存器值为
0x03E8(十进制为1000)。
#include
#include "derivative.h"
int a;
void main(void) {
EnableInterrupts;
TPMSC=0x08; /*
工作在边沿对齐PWM模式,选择
总线时钟工作,预分频因子为1*/
TPMMODH=0x0F;
TPMMODL=0x0A0; /*
向模寄存器写初值*/
TPMC0SC=0x28; /*
高为真脉冲*/
TPMC0VH=0x03; /*
向通道1定时寄存器写初值*/
TPMC0VL=0x0E8;
TPMC0SC_CH0IE=1; /*
允许通道1中断*/
for(;;)
{ __RESET_WATCHDOG(); }
}
void interrupt 5 TPM0() {
a=TPMC0SC;
TPMC0SC_CH0F=0; /*
清除中断标志位*/
TPMC0VH=0x03; /*
向通道寄存器重新装初值*/
TPMC0VL=0x0E8;
}
⑷利用TPM模块中心排列方式产

