《PSoCCreator软件及设计流程》由会员分享,可在线阅读,更多相关《PSoCCreator软件及设计流程(82页珍藏版)》请在金锄头文库上搜索。
1、第第8 8章章 PSoC CreatorPSoC Creator软件及设计流程软件及设计流程 Chapter 8 PSoC Creator Software bit myVar;myVar = myVar; myVar = myVar; if (!myVar) if (!myVar) . . PSoC3/5PSoC3/5基本编程模型基本编程模型- -位变量的使用位变量的使用此外,为了保证代码容易移植到此外,为了保证代码容易移植到PSoC5PSoC5上,可以使用上,可以使用 CYBITCYBIT关键字替换关键字替换 bitbit关键字。例如:关键字。例如:CYBIT myVar;CYBIT my
2、Var;PSoC Creator PSoC Creator软件工具中提供了完整的宏定义集,用软件工具中提供了完整的宏定义集,用 来将来将PSoC3PSoC3的代码移植到的代码移植到PSoC5PSoC5上。更详细的说明,请参上。更详细的说明,请参 考考cybootcyboot文件夹中自动生成的文件文件夹中自动生成的文件cytypes.hcytypes.h。PSoC3/5PSoC3/5基本编程模型基本编程模型- -避免从中断句柄调用函数避免从中断句柄调用函数当编译用于中断服务程序当编译用于中断服务程序ISRISR的的C C代码时,代码时,KeilKeil编译器编译器 将试图认为在将试图认为在ISR
3、ISR中可能修改的寄存器入栈操作。如果中可能修改的寄存器入栈操作。如果ISRISR包含一个函数调用,编译器并不知道函数调用将修改哪个包含一个函数调用,编译器并不知道函数调用将修改哪个 寄存器,这样就会将所有寄存器内容入栈。比如:改函数寄存器,这样就会将所有寄存器内容入栈。比如:改函数 调用:调用:PSoC3/5PSoC3/5基本编程模型基本编程模型- -避免从中断句柄调用函数避免从中断句柄调用函数CY_ISR(myISR) CY_ISR(myISR) UART_1_ReadRxStatus(); UART_1_ReadRxStatus(); 为:为:CYBIT flag; CYBIT flag
4、; CY_ISR(myISR) CY_ISR(myISR) flag = 1; flag = 1; PSoC3/5PSoC3/5基本编程模型基本编程模型- -避免从中断句柄调用函数避免从中断句柄调用函数void main() void main() /* /*等待等待ISRISR设置设置flagflag标志标志if (flag) if (flag) flag = 0; flag = 0; UART_1_ReadRxStatus(); UART_1_ReadRxStatus(); . . . . . .PSoC3/5PSoC3/5基本编程模型基本编程模型- -将变量放在合适的存储空间将变量放在合
5、适的存储空间当变量放在当变量放在80518051内部的存储空间时,具有最好的内部的存储空间时,具有最好的 CPUCPU访问效率,根据访问效率,定义变量类型的顺序访问效率,根据访问效率,定义变量类型的顺序 依次为依次为: data,idata,pdata: data,idata,pdata和和 xdata.xdata.由于堆栈空间有限,由于堆栈空间有限,KeilKeil编译器不在堆栈中保存编译器不在堆栈中保存本地变量,而是将其保存在固定的存储空间,并且和本地变量,而是将其保存在固定的存储空间,并且和 其它函数调用的变量共享存储空间。其它函数调用的变量共享存储空间。PSoC3/5PSoC3/5基本
6、编程模型基本编程模型- -将变量放在合适的存储空间将变量放在合适的存储空间此外,尽量使循环变量递减而不是递增操作,这是由此外,尽量使循环变量递减而不是递增操作,这是由 于测试等于于测试等于0 0操作比测试等于常数的操作要快。比如使用操作比测试等于常数的操作要快。比如使用下面的代码:下面的代码:void main() void main() data uint8 i; data uint8 i; /* /* 循环循环1010次次* */ / for (i = 10; i != 0; i-) for (i = 10; i != 0; i-) . . PSoC3/5PSoC3/5基本编程模型基本编程
7、模型- -将变量放在合适的存储空间将变量放在合适的存储空间在在C C代码中,为了测试某些位,经常使用下面的代代码中,为了测试某些位,经常使用下面的代码风格:码风格:uint8 x; uint8 x; x |= 0x10; /* set bit 4 */ x |= 0x10; /* set bit 4 */ x /* clear bit 4 */ x /* clear bit 4 */ x = 0x10; /* toggle bit 4 */ x = 0x10; /* toggle bit 4 */ if (x /* bdata uint8 myVar; /*放置放置myVarmyVar到到80
8、518051内部空间内部空间20-2F20-2Fsbit mybit4 = myVar4; /*myVar sbit mybit4 = myVar4; /*myVar变量的第变量的第4 4位位 * */ / mybit4 = 1; /* mybit4 = 1; /*设置设置myVar myVar 变量的第变量的第4 4位位* */ / mybit4 = 0; /* mybit4 = 0; /*清除清除myVarmyVar变量的第变量的第4 4位位 * */ / mybit4 = mybit4; /* mybit4 = mybit4; /*切换切换myVarmyVar的第的第4 4位位 * */
9、 / if (mybit4) /* if (mybit4) /*测试测试myVarmyVar的第的第4 4位位 * */ / . . . . . . 这个方法也可以对这个方法也可以对3232和和1616位变量其中的某些位进行操作。注意位变量其中的某些位进行操作。注意 bdatabdata和和sbitsbit定义为全局的,而不是本地的。定义为全局的,而不是本地的。PSoC3/5PSoC3/5基本编程模型基本编程模型- -将变量放在合适的存储空间将变量放在合适的存储空间2 2)将所感兴趣的比特位暂时放到感兴趣的)将所感兴趣的比特位暂时放到感兴趣的SFRSFR中。查中。查 看看cy_bootcy_b
10、oot文件夹下由文件夹下由PSoC CreatorPSoC Creator生成的生成的PSoC3_8051.hPSoC3_8051.h文文 件。了解件。了解sbitsbit和和sfrsfr关键字用于支持位访问的关键字用于支持位访问的SFRSFR。sfr PSW = 0xD0; sfr PSW = 0xD0; sbit P = PSW0; sbit P = PSW0; sbit F1 = PSW1; sbit F1 = PSW1; sbit OV = PSW2; sbit OV = PSW2; sbit RS0 = PSW3; sbit RS0 = PSW3; sbit RS1 = PSW4;
11、sbit RS1 = PSW4; sbit F0 = PSW5; sbit F0 = PSW5; sbit AC = PSW6; sbit AC = PSW6; sbit CY = PSW7;sbit CY = PSW7;PSoC3/5PSoC3/5基本编程模型基本编程模型- -使用使用B B寄存器用于暂存数据寄存器用于暂存数据在在80518051结构中,结构中,B B寄存器用来方便汇编指令寄存器用来方便汇编指令MULMUL和和 DIVDIV的操作。除此以外,它只是一个辅助的寄存器。下的操作。除此以外,它只是一个辅助的寄存器。下 面给出使用面给出使用B B寄存器实现两个寄存器实现两个8 8位变
12、量的交换:位变量的交换:uint8 x, y; uint8 x, y; B = x; B = x; x = y; x = y; y = B;y = B;PSoC3/5PSoC3/5基本编程模型基本编程模型- -编写汇编代码的方法编写汇编代码的方法1 1创建一个单独的汇编源文件创建一个单独的汇编源文件1 1)在)在PSoC CreatorPSoC Creator主界面的主界面的Project ExplorerProject Explorer子窗口下,子窗口下, 用鼠标右键点击工程名字,并选择用鼠标右键点击工程名字,并选择“ “Add new item”Add new item”。2) 2) 选择
13、选择“ “8051 Keil Assemby Assembly File”8051 Keil Assemby Assembly File”,然后输入文,然后输入文件名。件名。3 3)将创建一个汇编文件,该文件在整个工程中的扩展)将创建一个汇编文件,该文件在整个工程中的扩展 名为名为.a51.a51。4 4)在文件中添加汇编代码;)在文件中添加汇编代码;5) 5) 可以在主界面的主菜单下选择可以在主界面的主菜单下选择Helpdocumentation Helpdocumentation KeilAX51 Assembler User Guide for help on instruction,
14、KeilAX51 Assembler User Guide for help on instruction, templatetemplate等。查看相关的汇编语言指令。等。查看相关的汇编语言指令。PSoC3/5PSoC3/5基本编程模型基本编程模型- -编写汇编代码的方法编写汇编代码的方法2 2在在C C文件中使用内嵌汇编代码文件中使用内嵌汇编代码1 1)在)在C C源文件中,将汇编代码写在指令源文件中,将汇编代码写在指令“ “#pragma #pragma asm”asm”和和“ “Pragma endasm”Pragma endasm”中间。中间。2 2)在主界面下的)在主界面下的Project ExplorerProject Explorer子窗口下,鼠标右子窗口下,鼠标右 键点击源文件,出现键点击源文件,出现Build SettingsBuild Settings界面。界面。3 3)在在CompilerCompiler选项界面下,将选项界面下,将Inline AssemblyInline Assembly设置设置为为TrueTrue,即使能在,即使能在C C文件中内嵌汇编语言文件中内嵌汇编语言。PSoC3/5PSoC3/5基本编程模型基本编程模型-PSoC3-PSoC3中断编程模型中断编程模型