第2章MSP430F149单片机基础知识

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

等价与:MOV INCD
@R10,0(R11) R0
在执行时寄存器的自动增量在取操作数之后:
立即模式:MOV #45h,TONI
; #45h →(TONI)
如果 PC = 0FF12h,TONI = 10A8h y = TONI–PC = 10A8h - 0FF16h = 1192h ; 相当于 MOV #45h ,y(PC) ; #45h →(PC+y)
01116h 01114h 1112h
0xxxxh 01234h 0xxxxh
01116h 01114h 1112h
0xxxxh 0A123h 0xxxxh
间接模式:MOV.B
@R10,0(R11) ;(R10)→(R11 + 0), ;MOV.B仅传送字节(8位数据)
操作前RAM 操作后RAM 0FA34h 0FA32h 0FA30h 0xxxxh 05BC1h 0xxxxh
常数发生寄存器CG1和CG2
使用常数发生寄存器产生常数的优点: 1、不需要特殊的指令 2、对7种最常用的常数不需要额外的字操作数 3、缩短指令周期:不经过MDB就能直接访问
寻址模式 访问整个地址空间的不同寻址模式由As(寻址位, 源操作数的寻址模式)和Ad(寻址位,目标作数的 寻址模式)模式位的内容确定:
ROM 0FF16h 0FF14h 0FF12h 00000h 4AABh 0xxxxh PC
0FA32h 0FA30h
寄存器 R10 R11 0FA32h 002A6h
002A8h 002A6h 002A4h
0xxxxh 012xxh 0xxxxh
002A8h 002A6h 002A4h
0xxxxh 05BC1h 0xxxxh
2#中断请求
2#中断允许 2#中断源
n#中断允许 n#中断源
n#中断请求
状态寄存器SR
N:负数位 运算结果为负时置位。
字运算: N位设置为运算结果的15位。 例如:0 - 1 = FFFFh,1→N; 字节运算:N位设置为运算结果的7位。 例如:0 - 1 = FFh,1→N。
状态寄存器SR
Z:零位 运算结果为0时置位,不为0复位。
寄存器模式:MOV R10,R11
;R10→R11
变址模式:MOV 2(R5),6(R6) ;(R5+2)→(R6+6)
ROM 0FF16h 0FF14h 0FF12h 00006h 00002h 04596h PC 目标地址 0108Ch +0006h 01092h 源地址 01080h +0002h 01082h R5 R6 寄存器 01080h 0108Ch 操作前RAM 01094h 01092h 01090h 0xxxxh 05555h 0xxxxh 操作后RAM 01094h 01092h 01090h 0xxxxh 01234h 0xxxxh
例如:55h - 55h = 0;1→Z (结果为0) ;
55h - 50h = 5;0→Z (结果不为0)。
状态寄存器SR
C:进位位 当运算结果产生进位时置位,无进位时复位。
例如:FF00h + 0200H = 0100h;1→C(有进位);
FF00h - 0200H = FD00h;0→C(无进位)。
/定义Flash 写操作安全值(高位0xA5)
#define WRT
(0x0040)
//写操作使能位
#define LOCK
(0x0010)
//Lock = 1:Flash被锁存 (只读)
char *addr,*buf; //申明地址指针变量 const char dat ={0x02,0x78,0x12,0x33,0x54,0x6A}; char cont; addr = 0xA000; buf = &dat[0]; cont = 6; while(FCTL3 & BUSY){} //测试等待BUSY复位位 FCTL3 = FWKEY; //清楚写锁存位 FCTL1 = FWKEY + WRT; //设置写使能 for(cont = 0;cont < 6;cont++) *addr++ = buf[cont]; //写数据flash,且地址指针加1 FCTL1 = FWKEY; //擦除所有使能,防止误操作 FCTL3 = FWKEY + LOCK; // Flash被锁存(只读)
间接增量模式:MOV.B @R10+,0(R11) 与 MOV.B @R10,0(R11)的操作结果一样, 仅仅在结束时R10 = R0 + 1
等价与:MOV.B @R10,0(R11) INC R0 间接增量模式:MOV @R10+,0(R11) 与 MOV @R10,0(R11)的操作结果一样,仅 仅在结束时R10 = R0 + 2
第 2章
MSP430F149单片机基础知识
2.1 CPU概述 CPU寄存器
程序计数器PC 系统堆栈指针SP 第三次放入的数据 第二次放入的数据 第一次放入的数据
压堆栈( 取堆栈( PUSH POP)过程 )过程
SP-6 SP-4 SP-2
状态寄存器SR
V:溢出位 FFFFh + 1 将产生溢出,1→V
目标地址 0FF16h +1192h 010A82h ROM 0FF16h 0FF14h 0FF12h 01192h 00045h 040B0h PC 操作前RAM 操作后RAM 010AAh 010A8h 010A6h 0xxxxh 00045h 0xxxxh
010AAh 010A8h 010A6h
指令的时钟周期的总体规律(续) :
3周期:数据从CPU之外读写,且目标地址为Rx,源 地址需要换算,如: MOV 2(R5),R7 ;(R5+2) → R7 ADD &EDE,R6 ;ADD EDE,R6 ;EDE = PC+x BR @R9+ ;R9→PC,R9+2 BR #DATA ;(DATA)→ PC PUSH R5 ;R5 →( SP)
ROM 0FF16h 0FF14h 0FF12h 00000h 4AEBh 0xxxxh PC
0FA34h 0FA32h 0FA30h
0xxxxh 05BC1h 0xxxxh
寄存器 R10 R11 0FA33h
002A8h 002A7h
0xxh 012h 0xxh
002A8h 002A7h 002A6h
指令的时钟周期的总体规律(续2) :
4周期:目标地址为CPU之外的存储器,如: ADD R5,3(R6) ;R5 AND (R6+3)→(R6+3) XOR R8,EDE ;MOV R5,&EDE ;EDE是CPU之外的存储器
其它指令或操作 RETI 时钟周期: 5 中断 时钟周期: 6 WDT复位 时钟周期: 4 复位(RST*/NMI) 时钟周期: 4
0xxxxh 01234h 0xxxxh
指令的时钟周期与长度 MSP430的时钟周期为1~6。MSP430没有给出详 细的指令周期对照表,只给出了指令周期的分类:
指令的时钟周期的总体规律 : 1周期:数据不出CPU的指令,如: NOP CLR Rx INC Rx MOV Rx,Ry 2周期:数据从CPU之外读写,且目标地址为Rx如: Jxx ;各类跳转,地址→PC BR Rx ;Rx→PC, ;相当于JMP(Rx) ;Rx小于10位数 AND @Rx,Ry ;(Rx) AND Ry → Ry MOV #DATA,Rx ;#DATA → Rx
但是信息Flash的擦除段为128字节,而和程序Flash 的擦除段为512字节。信息是需要经常修改的,而程序 一般不会修改。 所以将信息放在擦除段小的区域内有利于信息的修 改,如果信息量较大,超过256字节,也可以将信息放 在程序Flash的空余位置上(应该是一个完整的段)。
FLASH擦除操作举例(0xA000~0xB000段): #define FWKEY #define ERASE (0xA500) (0x0002)
01084h 01082h 01080h
0xxxxh 01234h 0xxxxh
01084h 01082h 01080h
0xxxxh 01234h 0xxxxh
绝对模式:MOV &EDE,&TONI ;EDE→TONI 如果 EDE = 0F016h,TONI = 01114h
ROM 0FF16h 0FF14h 0FF12h 01114h 0F016h 04292h PC 操作前RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh 操作后RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh
x = EDE – PC = 0F016h - 0FF14h = 0F102h; y = TONI – PC = 01114h - 0FF16h = 11FEh; 相当于 MOV x(PC),y(PC) ;(PC+x)→(PC+y)
ROM 0FF16h 0FF14h 0FF12h 011FEh 0F102h 04090h 源地址 0FF14h +0F102h (1)F016h 目标地址 0FF16h +011FEh (1)1114h PC 操作前RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh 操作后RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh
01116h 01114h 1112h
0xxxxh 01234h 0xxxxh
01116h 01114h 1112h
0xxxxh 0A123h 0xxxxh
符号模式:MOV EDE, TONI
; ( EDE)→(TONI)
如果 PC = 0FF12h,EDE = 0F016h,TONI = 01114h
//定义Flash 写操作安全值(高位0xA5)
//定义Flash 段擦除允许位(低位0x02)
#define LOCK
(0x0010)
//擦除锁存位,Lock = 1:Flash被锁存(只读)
char *addr; addr = 0xA000;
//申明地址指针变量 //指针指向0xA000
while(FCTL3 & BUSY){} //测试等待BUSY复位位 FCTL1 = FWKEY + ERASE; //允许FLASH段擦除 FCTL3 = FWKEY; //清楚写锁存位 for(addr =(char *) 0xA000;addr<(char *)0xB000; addr += 0x200) *addr = 0;
//被擦除段的首地址写(0~0xFF)
FCTL1 = FWKEY; //擦除所有使能,防止误操作 FCTL3 = FWKEY + LOCK; // Flash被锁存(只读)
FLASH写操作举例:
将0x02,0x78,0x12,0x33,0x54,0x6A写入 0xA000为首地址的FLASH:
#define FWKEY (0xA500)
2.2 Flash操作 2.2.1 存储空间组织 存储器中的数据: 字节数据可以定位在偶 地址或奇地址; 字数据定位在偶地址: 低字节在偶地址,高字节 在下一个奇地址。
片内RAM、FLASH组织
其余空间:0~200h用于外围接口及部件的地址
2.2.2 Flash操作
Flash存储器: Flash存储器分为信息Flash和程序Flash 以MSP430F449为例: 信息Flash的地址为1000h~10FFh(256字节),程 序Flash的地址为1100h~FFFFh(60K)。 从硬件和功能上来说,信息Flash和程序Flash没有本 质的不同,程序首地址可以是1100h,也可以是1000h; 信息也可以放在1000h~FFFFh的任何位置。
0xxh 05Bh 0xxh
Baidu Nhomakorabea
002A7h 002A6h
间接模式:MOV
@R10,0(R11) ;(R10)→(R11 + 0), ;MOV传送字(16位数据)
操作前RAM 0FA34h 0xxxxh 05BC1h 0xxxxh 操作后RAM 0FA34h 0FA32h 0FA30h 0xxxxh 05BC1h 0xxxxh
x 0
也产生溢出,1→V
状态寄存器SR
低功耗工作模式控制
工作模式 AM LPM0 SCG1 0 0 SCG0 0 0 OSCOff 0 0 CPUOff 0 1
LPM1
LPM2 LPM3
0
1 1
1
0 1
0
0 0
1
1 1
LPM4
1
1
1
1
状态寄存器SR
GIE
1#中断允许 1#中断源 1#中断请求
GIE :通用中断允许位
相关文档
最新文档