找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3757|回复: 0
打印 上一主题 下一主题
收起左侧

MSP430状态寄存器SR的使用实验及小结

[复制链接]
跳转到指定楼层
楼主
研究LCD128128驱动程序时,看到一个语句LCD_SDA = CY; 当时明白C51中CY是进位标志,这种写法有点意思,好象很简洁。原程序见下:
//传送指令
voidtransfer_command_lcd(unsigned char cmd)
{
      int k;
      LCD_CS = 0;
      LCD_RS= 0;
      for (k=0; k<8; k++)
      {
            cmd = cmd<<1;
            LCD_SCL = 0;
            LCD_SDA = CY;
            LCD_SCL = 1;
      }
      LCD_CS=1;
}
因为要用MSP430驱动,很多语句要改,这个CY也估计要改。查msp430的h文件,是用C代替CY,但感觉不对。改完其它语句后,来实测这MSP430状态存器STATUS REGISTER BITS(SR)这个C是否能正常使用。
找到的SR定义及说明仅有如下的内容:
状态寄存器SR的位定义:
   
15                9  
  
8
7
6
5
4
3
2
1
0
保留未使用
V
SCG1
SCG0
OSCOFF
CPUOFF
GIE
N
Z
C
  C  :进位标志位,发生进位时置1
Z  :零位
N  :负数位
GIE   :通用中断允许位,1开全部中断,0关全部中断。
CPUOFF :CPU关闭位,既除RAM内容,端口、寄存器和特别允许的外围模块保持活动外,全部停止活动,所有允许的中断可以唤醒。
OSCOFF   :晶震关闭位,既除RAM内容,端口和寄存器保持活动外,全部活动停止,只可能在GIE置位条件下有外部中断或由NMI唤醒,如果不同时对CPUOFF置位,则不能对它置位;
SCG0/1     :系统时钟发生器控制位0和1,控制系统时钟发生器的4种状态;
V  :溢出位,当运算结果超出有符号数范围时置位,对字和字节格式均有效。

原来知道并使用的设置和清除SR的指令是bis、bic,见下例:
__bis_SR_register(LPM0_bits);
__bis_SR_register(LPM2_bits);
__bic_SR_register_on_exit(LPM2_bits);
先测试if(C)这样的写法,编译执行没有问题,但C每次==1,error。原因是C仅仅是BIT0定义,不指定是谁的bit0,一直==1,并非指向SR地址。
当然原来常用的写法是if(data &0x80) ...;高位先,传完一次再前移1位。
找SR的地址,不知道,后找到个函数。
__get_SR_register();
__get_SR_register_on_exit();
最初想到的作用:
1、如本文的作用,取C、Z、N的值等;
2、判断CPU状态,如晶振是否正常,是在哪种LPM(LPM0、1、2、3),但不能用于LPM4(CPU全停,只有外部中断可唤醒)。
3、其它作用,暂不知。
顺便测试了一下网上找到的“  C  :进位标志位,发生进位时置1”这话的意思,描述对不对?中间有进位时,是否置1?测试结果:如0001+1=0010,C为0,重复加一直为0!只有0xff+1时才C==1,OK,测试完成。这话的描述有岐义!
总结:
1、使用SRC=__get_SR_register()&C;if(SRC)...;与使用if(aa&0x80)...;需注意及关注的重点是,前者先在取值前data<<=1;移位(数据破坏),后者在判断完MSB(最高位)后才data<<=1;移位(数据破坏)。
2、读取SR相对复杂,没有多少好处,语句多,稍不注意有可能出错。不如用&0x80来的方便,16位的则用&0x8000,也很方便直观。
3、对各种编译器而言,后的兼容性更好。所以大部分程序中和人员常用0x80这个很强悍的数。
如果反响好,改天上贴,再写液晶驱动调试的艰难历程及UC1617s的驱动程序。

1.jpg (276.4 KB, 下载次数: 153)

SR的定义仅是位,与BIT一样,无SR的定义

SR的定义仅是位,与BIT一样,无SR的定义

2.jpg (428.16 KB, 下载次数: 143)

读SR的C位成功交换数据

读SR的C位成功交换数据

11.jpg (246.26 KB, 下载次数: 192)

错误的做法

错误的做法

状态寄存器 实验.zip

21.88 KB, 下载次数: 4, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表