现场总线技术 SJA1000寄存器和c语言_第1页
现场总线技术 SJA1000寄存器和c语言_第2页
现场总线技术 SJA1000寄存器和c语言_第3页
现场总线技术 SJA1000寄存器和c语言_第4页
现场总线技术 SJA1000寄存器和c语言_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术1SJA1000寄存器nBasicCAN模式寄存器列表模式寄存器列表n控制寄存器CRn命令寄存器CMRn状态寄存器SRn中断寄存器IRn发送缓冲器区n接收缓冲器n验收代码寄存器ACRn验收屏蔽寄存器AMRnPeliCAN寄存器地址列表寄存器地址列表n模式寄存器MODn命令寄存器CMRn状态寄存器SRn中断寄存器IRn中断允许寄存器IERn仲裁丢失捕捉寄存器ALCn错误代码捕捉寄存器ECCn错误报警限额寄存器EWLRnRX错误计数寄存器RXERRnTX 错误计数寄存器TXERRn发送缓冲器TXBn单滤波、标准帧滤波器配置n单滤

2、波、扩展帧滤波器配置n双滤波、标准帧滤波器配置n双滤波、扩展帧滤波器配置nRX报文计数器RMCnRX缓冲器起始地址寄存器n总线时序寄存器BTR0n总线定时寄存器BTR1n输出控制寄存器OCRn时钟分频寄存器CDR中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术2BasicCAN模式寄存器列表n控制器段中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术3BasicCAN模式寄存器列表(续1)n发送缓冲器中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术4BasicCAN模式寄存器列表(续2)n接收缓冲器及时钟分配器中国矿业大学机电工程

3、学院-张有忠 版权所有 2005-12现场总线技术5basican寄存器介绍-控制寄存器CRn控制寄存器(CR,地址0)n改变SJA1000工作状态n通过微处理器进行置位/复位n微控制器对控制寄存器进行读/写操作注:1、位为1有效 2、X表示这些位的值不受影响中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6命令寄存器CMRn命令寄存器(CMR,地址1)n微控制器发送到命令寄存器的命令启动一次传输层的操作n微控制器对命令寄存器只写只写,读命令寄存器的结果总是“1111 1111”中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7状态寄存器SRn状态寄

4、存器(SR,地址2)n状态寄存器的内容反映总线控制器的状态n状态寄存器为只读存储器中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术8中断寄存器IRn中断寄存器(IR,地址3)n识别SJA1000中断源n寄存器任一位(及一位以上)被置位时,/INT引脚被激活(低电平)n该寄存器被微处理器读出后,所有位被SJA1000复位,/INT引脚电平浮动(高阻状态)n微处理器只读注:在错误中断开启情况下,总线关闭时错误中断位被置位中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术9发送缓冲器区n发送缓冲器是用来存储微控制器要SJA1000 发送的报文n分为描述符区和

5、数据区n发送缓冲器的读/写只能由微控制器在工作模式下完成,在复位模式下读出的值总是FFH中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术10接收缓冲器n接收缓冲器的全部列表和发送缓冲器类似n接收缓冲器是RXFIFO 中可访问的部分,位于CAN 地址的20-29 之间n识别码、远程发送请求位和数据长度码同发送缓冲器的相同,只不过是在地址20-29 中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术11验收代码寄存器ACRn在验收滤波器的帮助下,CAN 控制器能够允许RXFIFO 只接收同识别码和验收滤波器中预设值相一致的报文n验收滤波器通过验收代码寄存器

6、ACR和验收屏蔽寄存器AMR来定义n验收代码寄存器ACR,地址4n复位请求位被置1(当前)时,这个寄存器是可以访问(读/写)n如果一条报文通过了验收滤波器的测试而且接收缓冲器又有空间,那么标识符和数据将被分别顺次写入RXFIFO n当报文被正确的接收完毕就会:n接收状态位置1(满)n接收中断使能位置1(使能),接收中断置1(产生中断)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术12验收屏蔽寄存器AMRn验收屏蔽寄存器AMR,地址5n如果复位请求位置1(当前),这个寄存器可以被访问(读/写)n验收屏蔽寄存器定义验收代码寄存器的相应位对验收滤波器是相关的(AM.X = 0

7、 )或无关的(AM.X = 1),(即可为任意值)n验收代码位(AC.7-AC.0)和标识码的高8 位(ID.10-ID.3)与验收屏蔽位与验收屏蔽位AM.7-AM.0的的”相关相关”的位的对应位的位的对应位必须相等,即如果满足以下条件的描述则报文被接收n(ID.10 to ID.3) (AC.7 to AC.0) (AM.7 to AM.0) 1111 1111 BnID 10010001標識符高8位nAC 10010110驗收代碼位neq= 11111000驗收nAM 00000111驗收屏蔽位nV= 11111111驗收屏蔽結果,通過中国矿业大学机电工程学院-张有忠 版权所有 2005-

8、12现场总线技术13PeliCAN寄存器地址列表总线时序0总线时序1总线时序0总线时序1总线时序0总线时序1错误报警限额错误报警限额错误报警限额中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术14PeliCAN寄存器地址列表(续1)RX标识码1RX标识码1RX标识码2RX标识码2TX标识码1TX标识码2TX标识码1TX标识码2RX标识码3RX标识码4TX标识码3TX标识码4中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术15PeliCAN寄存器地址列表(续2)RX报文计数器RX报文计数器RX缓冲区起始地址(RASB)中国矿业大学机电工程学院-张有忠

9、版权所有 2005-12现场总线技术16模式寄存器MOD,CAN地址0中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术17命令寄存器CMR,CAN地址1中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术18状态寄存器SR,CAN地址2nCAN地址2,状态寄存器反映CAN 控制器的状态,只读寄存器中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术19状态寄存器SR (续1)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术20中断寄存器IR,CAN地址3n中断寄存器IR,CAN地址3n中断源的识别n当寄存器的一位或

10、多位被置位时,CAN 中断将反映到CPUnCPU读此寄存器的时候除了接收中断外除了接收中断外的所有位都被复位n只读存储器中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术21中断寄存器IR(续)n 中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术22中断允许寄存器IER,CAN地址4n中断使能寄存器IER,CAN地址4n该寄存器能使不同类型的中断源对CPU有效n可读/写寄存器中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术23中断允许寄存器(续)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术24仲裁丢失捕捉

11、寄存器ALC,CAN地址11n仲裁丢失捕捉寄存器,ALC,CAN地址11n该寄存器包括了仲裁丢失的位置的信息,只读存储器,保留位的读出值为0n仲裁丢失时,会产生相应的仲裁丢失中断(中断允许时)。同时,位流处理器的当前位的位置被捕捉送入仲裁丢失捕捉寄存器。一直到用户通过软件读这个值,寄存器中的内容都不会改变,随后捕捉机制又被激活n读中断寄存器时,中断寄存器中相应的中断标志位被清除。直到仲裁丢失捕捉寄存器被读一次之后,新的仲裁丢失中断才可能有效中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术25错误代码捕捉寄存器ECC,CAN地址12n错误代码捕捉寄存器,ECC,CAN地址1

12、2n包含总线错误的类型和位置信息n只读中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术26错误报警限额寄存器EWLR,CAN地址13n错误报警限额寄存器,EWLR,CAN地址13n定义错误报警限额n复位模式时可读/写n硬件复位后错误报警限额寄存器的默认值为96n复位模式取消后,该寄存器的新值引起的出错状态的改变和错误报警中断才有可能发生中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术27RX错误计数寄存器RXERR,CAN地址14nRX错误计数寄存器,RXERR,CAN地址14nRX错误计数寄存器反应了接收错误计数器的当前值n硬件复位后寄存器被初始化

13、为0n在工作模式中,只读寄存器;在复位模式中可写寄存器n如果发生总线关闭RX错误计数器被初始化为0n总线关闭期间写寄存器无效n软件复位(MOD.0=1)时,接收错误计数器的值不受影响n注意:n只有先进入复位模式,才有可能由CPU改变RX错误计数器值n复位模式被取消后,由新的内容引起的错误状态的改变、错误报警、错误中断才可能发生中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术28TX 错误计数寄存器TXERR,CAN地址15nTX错误计数寄存器,TXERR,CAN地址15nTX 错误计数寄存器反映了发送错误计数器的当前值n工作模式中,只读;复位模式中,可写n硬件复位后,寄存

14、器被初始化为0n如果总线关闭,TX 错误计数器被初始化为127 来计算总线定义的最小时间(128 个总线空闲信号)。这段时间里读TX 错误计数器将反映出总线关闭恢复的状态信息n在总线关闭时,向TXERR 写0-254范围的值会清除总线关闭标志n在复位模式被清除后,控制器会等待一个11位的连续隐性位(总线空闲)n软件复位(MOD.0=1)时,发送错误计数器的值不受影响中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术29发送缓冲器TXB,CAN地址1628n发送缓冲器的布局n标识码区n标识码区的第一个字节是帧信息字节(结构信息),说明帧格式(SFF或EFF)、远程帧或数据帧和

15、数据长度nSFF(标准帧格式)有两个字节的标识码,EFF(扩展帧格式)有四个字节的标识码n数据区n数据区最多长8 个数据字节n发送缓冲器长13个字节,在CAN 地址的16-28n注意n使用CAN 地址的96-108可以直接访问发送缓冲器的RAM,这个RAM区是为发送缓冲器保留的,下面三个字节是通用的CAN地址109、110和111中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术30验收滤波器n验收滤波器n只有当接收报文中的标识码和验收滤波器预定义的值相等时,CAN 控制器才允许将已接收报文存入RXFIFOn验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器AMRn定义

16、n要接收的报文的标识码位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义验收代码寄存器中的某些位为无关,即可为任意值n在模式寄存器MOD中选择MOD.3,AFMn单滤波器模式AFM=1n双滤波器模式AFM=030中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术31验收滤波器-单滤波器n单滤波器配置n单滤波器配置定义一个4 字节长滤波器n滤波器字节和报文字节之间位的对应关系取决于当前接收帧格式n标准帧格式n如果接收的是标准帧格式的信息,在验收滤波中使用包括RTR在内的完整标识码和前两个数据字节用于数据滤波n如果由于置位RTR位而导致没有数据字节,或因为设置相应的数据

17、长度代码而没有或只有一个数据字节,报文也会被接受n对于一个成功接收的报文所有单个位在滤波器中的比较结果都必须为“接受”(下页图)31中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术32标准帧滤波32n(ID.10 to ID.3) (AC.7 to AC.0) (AM.7 to AM.0) 1111 1111 B中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术33标准帧滤波(续)n注意nAMR1 和ACR1 的低四位不用,为了和将来的产品兼容这些位可通过设置AMR1.4、AMR1.3、AMR1.2和AMR1.0为“1” 而编程为“无关,Dont Ca

18、re”33中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术34扩展帧滤波n扩展帧格式n如果接收的报文是扩展帧格式报文,包括RTR 位的全部标识码将被用于数据滤波n为了成功接收报文每个位的比较后都必须发出接受信号34ACRAMRID中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术35扩展帧滤波(续)n注意nAMR3 的最低两位和ACR3最低两位不用,为了和将来的产品兼容这些位应该通过置位AMR3.1 和AMR3.0 来编程为“无关,Dont Care”35中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术36验收滤波器-双滤波器n双

19、滤波器配置n该配置定义两个短滤波器n一条接收的报文要和两个滤波器比较来决定是否放入接收缓冲器中n至少有一个滤波器验收通过,接收的报文才有效n滤波器字节和报文字节之间位的对应关系取决于当前接收的帧格式36中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术37标准帧滤波n接收到标准帧报文时,两个滤波器是不一样n第一个滤波器比较包括RTR 位的整个标准标识码和报文的第一个数据字节n第二个滤波器只比较包括RTR 位的整个标准标识码n为了成功接收报文所有单个位的比较时应至少有一个滤波器表示“接受”nRTR位置位或数据长度代码是0时表示没有数据字节存在,无论怎样只要从开始到RTR位的部

20、分比较结果为“接受”,接收的报文就可以通过滤波器1n如果没有向滤波器请求数据字节滤波,AMR1 和AMR3 的低四位必须被置为“1”(无关)n两个滤波器对包括RTR 位在内的整个标准标识码进行滤波识别37中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术38扩展帧滤波n接收到扩展帧信息时两个滤波器相同,两个滤波器都只比较扩展识别码的前两个字节n必须在所有单个位的比较时至少有一个滤波器表示“接收”38中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术39RX报文计数器RMC,CAN 地址29nRX报文计数器寄存器nRMC,CAN 地址29n反映RXFIFO

21、中可用的信息数目,其值每次接收到报文时加1,每次释放接收缓冲器减1n复位后寄存器值为0n注1:这些位不能写,读出永远是0中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术40RX缓冲器起始地址寄存器,CAN 地址30nRBSA寄存器,CAN 地址30n反映接收缓冲器窗口中存放接收到的报文第一个字节的内部RAM地址n内部RAM起始于CAN地址32,可以被CPU 读/写访问(复位模式只能写)n例子n如果RBSA = 24(十进制),当前在接收缓冲器窗口(CAN地址1628)中的可视报文被存储在内部起始地址为24的RAM中n因为RAM也被直接列入CAN 地址空间(起始地址32等于

22、RAM地址0),所以这条信息也可以用CAN 地址56及随后字节地址访问CAN 地址=RBSA+32 = 24+32 = 56n如果信息超过RAM地址63会从地址0继续 (RAM地址64开始是TX缓冲区空间)n当FIFO中至少有一条可用报文时就将会执行释放接收缓冲器命令,释放接收缓冲器后RBSA更新为下一条报文的开始n硬件复位时指针初始化为00Hn软件复位(设置为复位模式,MOD.0=1)时指针保持原值,但FIFO被清空n虽然RAM的内容是不会改变,但下一条接收的或传送的信息将会覆盖当前在接收缓冲器窗口的可视信息nRX 缓冲器起始地址寄存器在工作模式中只读,在复位模式中是可读/写n必须注意,写访

23、问RBSA首次有效是在下一个内部时钟的上升沿PeliCAN寄存器中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术41nBasicCAN、PeliCAN模式n公共寄存器介绍中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术42总线时序寄存器BTR0,CAN地址6n总线时序寄存器BTR0,CAN地址6n总线定时寄存器0定义波特率预制器BRP(Baud Rate Prescaler)和同步跳转宽度SJW (Synchronization Jump Width)n复位模式有效时,BTR0寄存器可读/写n如果选择PeliCAN模式,此寄存器在工作模式中只读,在B

24、asicCAN模式中读出值总是FFHn波特率预置器域nCAN系统时钟tSCL的周期可编程,而且决定了相应的位时序nCAN系统时钟由如下公式计算ntSCL =2tCLK X (32 X BRP.5 +16 X BRP.4 + 8 X BRP.3 + 4 X BRP.2 + 2 X BRP.1 + BRP.0 + 1)ntCLK:XTAL的振荡周期 = 1/fXTALn同步跳转宽度位域n为了补偿在不同总线控制器的时钟振荡器之间的相位偏移,任何总线控制器必须在当前传送的相关信号边沿重新同步n同步跳转宽度tSJW定义了每一位的位周期再被重新同步时缩短或延长的时钟周期的最大数目ntSJW=tSCL (2

25、 X SJW.1 + SJW.0 + 1)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术43总线定时寄存器BTR1,CAN地址7nBTR1,CAN地址7n定义每个位周期的长度、采样点位置和在每个采样点的采样数目n在复位模式中,寄存器可以读/写访问n在PeliCAN 模式的工作模式中,这个寄存器只读,在BasicCAN 模式中读出值总是FFHn采样数目 SAMnSAM=0,单倍采样,每位采样1次。建议使用在高速总线上(SAE C级)nSAM=1,三倍采样,每位采样3次。建议在中低速总线上使用(SAE A,B级),可以有效消除总线上的毛刺n时间段1和时间段2nTSEG1和T

26、SEG2决定每一位的时钟周期数目和采样点的位置ntSYNCSEG=1 X tSCLntTSEG1 = tSCL X (8 X TSEG1.3 + 4 X TSEG1.2 + 2 X TSEG1.1 + TSEG1.0 + 1)ntTSEG2 = tSCL X (4 X TSEG2.2 + 2 X TSEG2.1 + TSEG2.1 + 1)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术44总线定时寄存器1(续)ntSCL = 4 tCLKnBRP = 000001ntSEG1 = 6 tSCLnTSEG1 = 0101ntTSEG2 = 3 tSCLnTSEG2 = 0

27、10中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术45输出控制寄存器OCR,CAN地址8n输出控制寄存器OCR,CAN地址8n由软件控制不同输出驱动配置n在复位模式中,寄存器可被读/写访问n在PeliCAN模式的工作模式中,这个寄存器只读,在BasicCAN 模式中读出值总是FFH中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术46时钟分频寄存器CDR,CAN地址31n时钟分频寄存器,CDR,CAN地址31n注1:此位不能写,读出总是0nCD.2-CD.0n复位模式和工作模式中一样,CD.2-CD.0 是可以无限制访问n这些位是用来定义外部CLKO

28、UT引脚上的输出时钟频率Clock Off中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术47现场总线技术C语言 概述教材:现场总线CAN原理与应用技术作者:绕运涛、邹继军、郑勇荟中国矿业大学机电工程学院2012-09中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术4848C语言实例 1n输出一条信息的C程序nmain()nprintf(Hello, World!n);nn运行后在屏幕上输出:nHello, World!n_中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术4949C语言实例 2n由用户输入两个整数,计算机输出两个

29、数中最大的一个由用户输入两个整数,计算机输出两个数中最大的一个nmain() /*主函数*/nnint x,y,z; /*定义变量*/nscanf(%d,%d,&x,&y); /*从键盘输入两个数*/nz = max(x,y); /*找出最大的一个数并赋给 z*/nprintf(The Max number is %d,z); /*输出*/nnint max(int x, int y)nnint z;nif (x y)z = x; /*如果X大于Y就将X的值赋给Z*/nelse z = y; /*否则就将Y的值赋给Z*/nreturn(z); /函数结束,返回值给调用函数n中国

30、矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5050C语言程序的特点 1nC程序完全是由函数构成n一个程序至少要有一个main()函数,用户也可以根据需要设计自己的函数,象上面的函数max()nC语言中提供了丰富的函数,被称作库函数。标准中提供了一百多个库函数。利用这些现成的函数,我们可以非常轻松的编写功能强大的程序nC程序的函数式结构使得程序非常容易实现模块化,便于阅读和维护n函数由两大部分组成n第一部分是函数的说明部分如函数的名称,函数的返回值类型,函数的参数及类型n第二部分是函数的实现部分由花括号括起来的若干变量定义和语句构成nC程序总是从main()函数开始执行n

31、不论main()函数在程序的什么地方,也就是说,可以将main()函数放在程序的任何位置nC程序的书写格式比较自由n可以在一行上写若干语句,也可以在多行上写一条语句n每个语句后面都要有一个分号作为语句的结束中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5151C语言程序的特点 2nC语言中没有专门的输入、输出语句n输入输出是通过scanf()和printf()等库函数实现的nC程序中可以用/* */或/对任何部分进行注释n好的程序都要有必要的注释以提高程序的可读性n/* */可以跨行注释,/只能在一行注释n用C语言编写的程序非常简洁nC 语言只有个32关键字,9种控制语

32、句n程序主要由小写字母组成,书写格式自由,它压缩了其它高级语言中的冗余的部分n运算符非常丰富nC 语言中共有种34运算符,可以实现在其它高级语言中难以实现的功能n数据结构丰富nC 语言中的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型等n派生类型数据结构能够用来实现非常复杂的数据结构,如线性表、链表、栈、队列、树、图等n具有结构化的控制语句n如if() else, while, switch等。并用函数作为程序模块,是理想的结构化程序设计语言n语法限制不太严格n如对数组下标越界不作检查,各种类型的变量可以通用n允许直接访问物理内存,能实现对位的操作n生成的目标代码质量高,只比汇编

33、语言生成的代码效率低20左右nC程序的可移植好,不用作太多的修改就可用于其它型号的计算机或其它操作系统中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5252C语言数据类型n在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类n基本数据类型n基本数据类型最主要的特点是,其值不可以再分解为其它类型n亦即,基本数据类型是自我说明的n构造数据类型n构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的n亦即,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型n在C语言中,构造类型有以下几种:n

34、数组类型n结构类型n联合类型n指针类型n指针是一种特殊的,同时又是具有重要作用的数据类型n其值用来表示某个量在内存储器中的地址中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5353C语言数据类型(续)n空类型(void)n在调用函数值时,通常应向调用者返回一个函数值,这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明n但是,也有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”,其类型说明符为voidn对于基本数据类型量,按其取值是否可改变又分为常量和变量两种n它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮

35、点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量n在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5454整型数据中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5555实型数据n实型数据表示的实际上就是我们生活带小数的数值n在程序运行过程中不能被改变其值的实型数被称为实型常量实型常量浮点数n在程序运行过程中可以改变其值的实型量被称为实型变量实型变量nmain()nnfloat x;ndouble y;nx=123456.789; /只能将123456.7七 /位有效数字赋值给

36、xny=123456.789; /能将全部数位赋值给ynprintf(%f,%f,x,y);nn说明n一个实型常量赋值给一个实型变量时,只根据实型变量表示的有效数字的位数,在实型常量中按从左向右的方向截取数据nFloat型的变量只能保存7位有效数字ndouble 型的变量只能保存1516位的有效数字中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5656字符型数据n字符常量nC语言中的字符常量是用单引号()括起来的一个字符。如A, x, D, ?, 3,X 等都是字符常量n字符型变量类型和数值范围n数据类型解释内存中所占位数表示数值的范围nchar有符号字符型8位1281

37、27nunsigned char无符号字符型8位0256nC语言中还规定有另一类字符常量,它们以开头,被称作转义字符。如我们前面已多次遇到的n这个符号,它表示换行符号。字母n在字符后改变了原来的意义,所以称这类以开头的字符为转义字符n字符形式含义nn 换行nt横向跳格(跳到下一个输出区域)nv竖向跳格nb退格nr回车nf走纸换页n反斜杠字符n单引号nddd13位八进制数所代表的字符nxhh12位十六进制数所代表的字符中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5757字符型数据 2n字符变量n字符变量是用来存放字符常量的,一个字符变量中只能存放一个字符n字符变量的定义

38、形式如:char x1,x2; 定义了两个字符型变量n可以使用赋值语句对变量x1和x2赋值,如:x1=x;x2=y; n字符型数据(常量和变量)在内存中占一个字节的空间n字符在内存中以ASCII码形式存放,实际上是以二进制方式存放n字符数据可以当成一个8位二进制数据看待-特别适合单片机处理特别适合单片机处理n字符串常量n字符串常量是用双引号括起来的字符序列。如:%d,%d This is my first program!。 C语言规定字符串的存储方式为:字符串中的每个字符(转义字符只能被看成一个字符)按照它们的ASCII码值的二进制形式存储在内存中,并在存放串中最后一个字符的位置后面再存入一

39、个字符0(ASCII码值为0的字符)n例如:“China_Uni在内存中的表示如下,要占个10字节n内存位置:0 1 2 3 4 5 6 7 8 9n字符: C h i n a _ U n i 0n而x在内存中的表示为nx 0(2个字节)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5858各类数值型数据之间的混合运算n自动转换规则图解中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术5959强制类型转换n强制类型转换是通过类型转换运算来实现,其一般形式为n(类型说明符) (表达式)n其功能是把表达式的运算结果强制转换成类型说明符所表示的类型n例如:

40、n (float) a 把a转换为实型n (int)(x+y) 把x+y的结果转换为整型n在使用强制转换时应注意以下问题:n类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了n无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型nmain() n float f=5.75;n printf(int)f=%d,f=%fn,(int)f,f);nn输出结果:int f=5, f=5.75n本例表明,f 虽强制转为int型,但只在运算中起作

41、用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5(删去了小数)而f的值仍为5.75。 中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6060标识符n什么是标识符什么是标识符n它是用来表示变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。在C语言中各种名称都是由标识符来表示的。通俗一点说,它就相当于是一个人的名字一样n标识符的命名规则标识符的命名规则nC语言中规定,标识符只能用字母字母、数字数字、下划线下划线三种字符构成,而且标识符的第一个字符必须是字母或下划线n合法的标识符: Shi_jin , total , _screenx , su

42、m1,sum2 n不合法的标识符: shi-jin , 1sum, screen*x n标识符的长度有一定的限制nC99规定64位标识符n标识符中大写字母和小写字母被认为是不同的字符,所以对于下面两个标识符Student和student,系统认为是不同的名称中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6161常量和变量n#define PRICE 30nmain()n int num, total; num = 10; total = num*PRICE; printf (total=%d, total);nn在这个程序中, PRICE这组字符就称为一个标识符n在程序

43、运行过程中,其值不能被改变的量称为常量,比如定义后的PRICE称为符号常量符号常量n在程序运行过程中,其值能被改变的量称为变量n提到一个变量时,我们应该能想到1、这个变量已经定义过2、这个变量是属于某一种数据类型的3、这个变量在内存中占用了若干个字节的空间4、这个变量能表示的数值范围中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6262变量说明中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6363变量定义说明n存储类说明符nauto自动存储类,默认的存储类别,函数进入时建立,退出时消失nregister寄存器存储类,将变量放到CPU的寄存器中ns

44、tatic静态存储类,变量的存储地址固定,程序生存期间永远存在nextern外部存储类,在另外一个C语言文件中定义的变量n类型修识符nconst常量修识符,表示该被修饰量为常量int const *ptr;/说明指针指向的对象是常量int * cont ptr;/说明指针本身是常量, 指向的对象是变量nvolatile易失性修识符,所说明的变量或指针可以由于多种原因而被修改, 用于防止编译程序优化时导致不能得到正确的值ndata,idata,pdata,xdata,code,bdata是针对8051等单片机的C51语言所 特有的存储类修识符(见下页表)n类型说明符n前面内容已经作过介绍中国矿业

45、大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6464变量定义说明 2nC51语言特有的存储类型中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6565C51特有数据类型nC51中除了以下C语言中通用的数据类型外:nchar,unsigned char,int,unsigned,unsigned long,long,float,double, typedef别名n针对MCS-51特有的硬件结构,扩展了以下数据类型:nbit,sfr,sfr16,sbitnbit 位变量n位变量的值可以是1(true),0(false)nbit类型的修识符nbdata - 位

46、变量定义在128位可位寻址区ndata或idatanbit类型的数据说明nbdata bit first;/正确ndata bit second;/正确nidata bit third;/正确nbit forth; /正确nstatic bit sixth;/正确npdata bit forth;/错误中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6666C51特有数据类型(续1)n位类型不能说明为指针或数组nbit *dptr;/错误nbit b_array;/错误n位变量可以作为结构或联合的成员n位变量可以作为函数的参数和返回量n但使用寄存器组修饰的函数不能用位变量

47、作返回量。因为按照C51的规定,位变量放在ACC的进位位中返回。用寄存器组修饰的函数其所用的寄存器组在返回前改变了,寄存器中返回的量是不正确的。n与8051硬件特性操作有关的位变量必须定位在8051的片内寄存器区(RAM)的可位寻址空间中,使用bdata存储修饰符说明存储类型。中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6767C51特有数据类型(续2)n8051的特殊功能寄存器和特殊功能位n8051的21个特殊功能寄存器在片内RAM中有其绝对地址,8051的芯片说明文件已经为他们用于定义标识符起了名字。 C51编译器要做的是对这些预定义标识符予以承认并把它们与绝对地

48、址相联系,这是通过包含文件实现的。nC51中使用sfr, sfr16两种说明符定义特殊功能寄存器nsfr 特殊功能寄存器预定义标识符 = 绝对地址 nsfr16 特殊功能寄存器预定义标识符 = 绝对地址n通过标识符说明后:n可以象变量说明一样,用于定义标识符存取特殊功能寄存器nSfr用来说明按照8位(字节)地址存取的特殊功能寄存器,sfr16说明按照16位存取的特殊功能寄存器n例如:nsfr SCON = 0 x98;/串口控制寄存器地址98Hnsfr TMOD = 0 x89;/定时器/计数器模式控制寄存器地址89Hnsfr T2 = 0 xCC;/定时器2:T2低8位地址为0 xCC,高8

49、位地址为0 xCDn经过定义的特殊功能寄存器,就可以象普通变量一样用赋值语句进行赋值,赋值的结果是改变对应的特殊功能寄存器的值n如果特殊功能寄存器是端口地址,则读取时读入端口值,赋值时则是写端口中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6868C51特有数据类型 (续3)n在8051应用中,常常需要单独访问特殊功能寄存器的特定位,可以使用sbit(特殊位)类型来定义可以访问位寻址对象的变量n(1)-sbit预定义SFR位标识符 = 可按位定义的预定义SFR标识符 常量nsfr PSW = 0 xD0;/定义PSW寄存器的地址为0 xD0nsbit OV = PSW

50、2;/定义OV位为PSW.2,地址为0 xD2n“” 号前是已经定义好的SFR名字, “” 号后面的数值定义特殊位在寄存器上的位置,取值为07n(2)-sbit预定义SFR为标识符 = 可按位寻址的SFR绝对地址 常量nsbit OV = 0 xD0 2;/OV的地址为0 xD2nsbit CY = 0 xD0 7;/CY的地址为0 xD7n其中, “” 号前面作为基地址的常数值必须是位于内部RAM 0 x800 xFF之间的特殊功能寄存器的地址,这些地址都能被8整除, “” 号后面的数值定义特殊位在寄存器上的位置,取值为07n(3)-sbit预定义SFR为标识符 = SFR位的绝对地址nsb

51、it OV = 0 xD2;nsbit CY = 0 xD7;n这种方式将特功能寄存器可位访问位的绝对地址直接赋值给标识符,地址的常数值必须是位于0 x800 xFFn经过位变量定义的标识符可以像普通变量一样进行存取访问中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术6969C51特有数据类型(续4)nsbit说明符还可以用在bdata修饰的RAM空间定义位变量n(1)-直接用bit说明符说明位变量(前文内容)n(2)-先说明为bdata存储空间的char变量或int变量,在进一步用sbit将char或int变量中特定位说明为位变量(采用 “ ”符号)nbdata int

52、 ivar;nsbit ivarbit10 = ivar 10;n/位变量ivarbit10是整型变量ivar的从低位(0位)起的第10位nbdata char myarray 3 ;nsbit myarray2_1 = myarray 2 1;nsbit myarray0_0 = myarray 0 0;n/位变量myarray2_1是字符型数组的第 2 个元素的从低位起的第 1 位n/位变量myarray0_0是字符型数组的第 0 个元素从低位起的第 0 位中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7070变量赋值n变量赋初值就是在定义变量的同时,给变量赋一个值

53、nint x=3; /*定义一个整型变量x,它的初值是3*/nfloat y=4.5; /*定义一个实型变量y,它的初值是4.5*/ nchar z=a; /*定义一个字符型变量z,它的初值是小写字母a*/ nint x,y,z=3; /*x, y没有赋值,z=3*/n/*另外的形式*/nint a,b,c;na=b=c=3;注意:定义变量时不允许使用这种连续赋值的方式中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7171C运算符n算术运算符n用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种n关系运算符n

54、用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种n逻辑运算符n用于逻辑运算。包括与(&)、或(|)、非(!)三种n位操作运算符n参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种n条件运算符n这是一个三目运算符,用于条件求值( ? : )n赋值运算符n用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种n逗号运算符n用于把若干表达式组合成一个表达式(,)n指针运算符n用于取内容(*)和取地址(&)二种运算 n求字

55、节数运算符n用于计算数据类型所占的字节数(sizeof)n特殊运算符n有括号(),下标,成员(,.)等几种中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7272C运算符及其特性中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7373C运算符及其特性 2中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7474运算符和表达式n基本的算术运算符基本的算术运算符n加法运算符“+”:a+b, 4+8n减法运算符“-”:a-b, -x,-5n乘法运算符“*”:a*b, 3*5n除法运算符“/”:a/b, 3/5n求余运算符(模运算符)“%

56、”: 5%3=2n算术表达式算术表达式n用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子n以下是算术表达式的例子na+bn(a*2)cn(x+r)*8-(a+b)7n+Insin(x)+sin(y)n(+i)-(j+)+(k-)中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7575运算符和表达式 2n运算符的优先级运算符的优先级nC语言中,运算符的运算优先级共分为15级。15级最高,1级最低n运算符的结合性运算符的结合性nC语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)n例如算术运算符的结合性是自左至右,即先左后右

57、如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”n而自右至左的结合方向称为“右结合性”如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算语言运算符中有不少为右结合性,应注意区别,以避免理解错误 中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7676运算符和表达式 3n自增、自减运算符自增、自减运算符n自增,自减运算符:自增1运算符记为“+”,其功能是使变量的值自增1n自减1运算符记为“-”,其功能是使变量值自减1n+i i自增1后再参与其它运算n-i i自减1后再参与其它运

58、算ni+ i参与运算后,i的值再自增1ni- i参与运算后,i的值再自减1中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7777运算符和表达式 4n赋值运算符赋值运算符n简单赋值运算符和表达式n变量=表达式n例如:nx=a+bnw=sin(a)+sin(b)ny=i+-jn在其它高级语言中,赋值构成了一个语句,称为赋值语句。 而在C中,把“=”定义为运算符,从而组成赋值表达式。凡是表达式可以出现的地方均可出现赋值表达式。n例如,式子:nx=(a=5)+(b=8)n在语言中也可以组成赋值语句,按照语言规定,任何表达式在其未尾加上分号就构成为语句。因此如nx=8; a=b=

59、c=5;都是赋值语句,在前面各例中我们已大量使用过了 中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术7878运算符和表达式 5n类型转换类型转换n如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:n实型赋予整型,舍去小数部分n整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)n字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0n整型赋予字符型,只把低八位赋予字符量中国矿业大学机电工程学院-张有忠 版权所有 2005-12现

60、场总线技术7979运算符和表达式 6n复合的赋值运算符复合的赋值运算符n在赋值符“=”之前加上其它二目运算符可构成复合赋值符n如+=,-=,*=,=,%=,=,&=,=,|=。 n构成复合赋值表达式的一般形式为:n变量 双目运算符=表达式n它等效于n变量=变量 运算符 表达式n例如:n a+=5 等价于a=a+5n x*=y+7 等价于x=x*(y+7)n r%=p 等价于r=r%p中国矿业大学机电工程学院-张有忠 版权所有 2005-12现场总线技术8080C51中的字位运算nC51中共有6种字位运算符,按优先级分类:n:按位取反 /对一个二进制数按位取反,0变1,1变0n:左移位 将左侧操作数按照右侧操作数指示的位数向左移位 运算规则: 先将左侧操作数化为int型,再进行左移位,移

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论