历史上的今天
今天是:2025年10月17日(星期五)
2022年10月17日 | MSP430初学:MSP430单片机C语言基础(二)
2022-10-17 来源:csdn
1.进制转换
作为一名”勤快“少年,我自然是:

2.数值数据的表示
1.储存单位

计算机的数据是以二进制形式存在的,所以它的储存单位也与二进制有关
储存单位:位bit,b,是数据储存的最小单位,表示一位二进制信息
字节Byte,B,是信息储存的基本单位,1B由8位二进制数字组成,1B=8b
2.有符号的二进制数
计算机中,无符号位和有符号位的取值范围区别_HD243608836的博客-CSDN博客_符号位
char 8bit 1Byte 2^8=256
C语言各数据类型大小和取值范围_画船听雨眠-CSDN博客_c语言数据类型范围
十进制数有正数和负数之分,二进制数也有正数和负数之分。带有正、负号的二进制数称为真值,如+1101001、-1001011就是真值。为了方便运算,在计算机中约定:在有符号数的前面增加 1 位符号位,用“0”表示正号,用“1”表示负号。这种在计算机中用 0 和 1 表示正负号的数称为机器数。目前常用的机器数编码方法有原码、反码和补码三种。(哈哈,让我想起了数电)
1)原码
正数的符号位用 0 表示,负数的符号位用 1 表示,其余数位表示数值本身。常用[X]原表示X的原码。
在8 位二进制数中,给出十进制数+52 和-52 的原码表示
[+52]原 = 0011 0100
[-52]原 = 1011 0100
数值位相同,符号位不同
原码表示简单易懂,在计算机中常用于实现乘除运算,但加减运算不方便。例如,遇到两个异号数相加或者两个同号数相减,就要做减法。为了简化运算器的复杂性,提高速度,需要将减法运算转变为加法运算,其优势是在设计电子器件时,只需要设计加法器,不需要再单独设计减法器。因此人们引入了反码表示和补码表示。(msp430有乘法器)
2)反码
正数的反码表示与原码表示相同,最高位为符号位,用0 表示正数,其余各位为数值位。而负数的反码表示,是在原码的基础上保持符号位不变,其他各位按位取反得到的。常用[X]反 表示 X 的反码。
在 8 位二进制数中,给出十进制数+25 和-25 的反码表示。
[+ 25]反 =[+ 25]原= 0001 1001B(B表示二进制)
[-25]反 = 1110 0110
3)补码
正数的补码表示与其原码相同,即最高位为符号位,用0表示正数,其余各位为数值位。而负数的补码表示是在原码的基础上保持符号位不变,其他各数值位按位取反,然后在最低位加 1 运算得到的。常用[X]补表示X的补码。
3.实数的表示
4.进位与溢出
(51单片机)看到的较为巧妙给的寄存器赋值方法:
注意:第写法有BUG!!

921600>65535,溢出了

关于int、short int、long int、long long 的区别_Adrianna的专栏-CSDN博客
其中一段
在标准中,并没有规定long一定要比int长,也没有规定short要比int短。
标准是这么说的:长整型至少和整型一样长,整型至少和短整型一样长。
这个的规则同样适用于浮点型long double至少和double一样长,double至少和float一样长。
至于如何实现要看编译器厂商.
应该这样写:

要点:unsigned int ---> unsigned char int到char截断
解释:
int是4个字节
char是1个字节,
把int赋值给char,就要丢失高3个字节的内容,也就是截断,
如果你能确定int的内容只有低位一个字节,int不是可以强制转换
(0-255)unsigned char
int i=97;
char c;
c=(char)i; //不推荐这么用
要点:
unsigned int tmp;
T0RH = (unsigned char)(tmp>>8);
T0RL = (unsigned char)(tmp);
>>对位操作
51可以对寄存器按位赋值,如P0^1=1,但msp430不可以,要对整个寄存器全部重新赋值,只改变需要的位,其他位不变,要注意的是头文件中定义了每位数值的常量。
在引用的头文件右键
这样使用时就容易多了,不用一位一位的自己写了,使用位运算
P5DIR = P5DIR |BIT4;//打开VCC
P5OUT =P5OUT| BIT4;
C语言位运算
位运算(二):8bit数据指定位置0或置1操作_XHfight的博客-CSDN博客
位操作---置位(置1)、清除和取反_chengwei1128的博客-CSDN博客
C语言位操作_无界编程-CSDN博客(嵌入式)
& 按位与
| 按位或
^ 按位异或
~按位取反
//某一位1
P5DIR = P5DIR |BIT4;
//某一位0
ADC12CTL0 &= ~ADC12ENC;
//某一位取反
P5OUT ^= BIT4;
注意观察,0x0001u,u是什么意思?
首先,前面加0x或者0X表示这个数的表示形式是16位
其次,末尾加u表示无符号
溢出
CY 位是进位位,用来表示本次无符号数运算结果的溢出。由于无符号数的最高有效位只有数位意义而无符号意义,所以该位所产生的进位应该是本次运算结果的实际进位值。
所以说:进位位 CY 是在给定二进制数的位数范围内,代表了本次运算结果的溢出情况。另一方面,它所保存的进位值有时也是有用的。例如,双字长运算时,可以利用进位值把低位字的进位计入高位字。
OV 位表示溢出。溢出位是用来表示带符号数的运算结果超出有限字长的表示范围的标志。它是根据两个操作数的符号及其变化来设置的。例如,两个操作数符号相同而运算
结果的符号与之相反时 OV=1,反之,OV=0。

51单片机,定时器寄存器溢出中断
5.符号扩展问题
8bit --> 16bit --->32bit
3.计算机的码制
ASCII码
UART串口通讯 以16进制发送数据
史海拾趣
|
摘要:针对现有水轮发电机组振摆监测系统永久性结构模式 问题,构建了基于CC2430的水轮发电机组无线振摆监测系 统。给出了系统的体系结构和工作流程;设计基于CC2430模 块的无线传感器节点;详尽给出系统能源、信号同步及采样 精度测试等关键技 ...… 查看全部问答> |
|
请教,bootloader中有这么一个函数: // lqm: 1G08:dwStartSector = 7 * 64 (boot:7个block) HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags) { & ...… 查看全部问答> |
|
wince5.0下 问题: 怎样定制内核,让系统默认语言是英文,但是我能浏览中文及中文繁体的网站? 我在定制内核的时候 platform --setting LOACL 选了三种 中文、中文(台湾)、英文。 defaulte language:英语(美国)的时候,中文网页显示不出 ...… 查看全部问答> |
|
本人新手,求教各位大神,我用Altium Designer summer 09直接打开TI提供的原理图时,能打开,但是没有任何内容,这是为什么? 然后我用导入的方法时,遇到了无法导入的问题,见图,这又是什么原因呢?… 查看全部问答> |
|
昨天被强拉去网吧参战CS,很不想去因为个人从来不去网吧都是在出租房玩而且老婆小孩也在,有五年作战经验的我虽然不太适应网吧的环境,但水平虽不咋地但还马马虎虎,二十多号人在网吧局域网激战,不大喜欢网吧那个味道,久了很头晕像晕车,每周一次 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 作为屌丝IT宅,又忙了大半年,这个十一说什么也要出去玩一玩。看着台湾游最近挺火,就四处翻了翻旅游介绍。不看不要紧,居然在杨宗纬为台湾宣传的MV上看到了联想新出的MIIX。 这是神马情况? ...… 查看全部问答> |
|
ZedBoard学习手记(八) 更大的目标!在Linux下开发图形用户 在Linux下做GUI,比较简单的方法是使用QT。QT一直被用于跨平台的应用程序开发,之前属于Nokia,现在被卖给了Digia,开源版本的主页是http://qt-project.org/。QT的开发语言是C++和QML,可以用各种工具来进行开发设计,官方的IDE是QT Creator。要说 ...… 查看全部问答> |






