本帖最后由 gaoyang9992006 于 2020-9-22 13:19 编辑
用惯了库函数,或者图形化配置,你还经常看手册吗,还能记得多少个常用的寄存器?
接下来用这个例子怀旧一下。
在本教程中,我们将看到带PIC单片机的 LED闪烁的示例,LED闪烁是初学者的第一步。您将学习如何使用PIC微控制器的GPIO端口以及如何使用数据表访问GPIO寄存器。
所需材料
用于LED闪烁的PIC寄存器- OSCCON内部振荡器控制寄存器
- TRICx寄存器
- 使用PORTx寄存器和LATx寄存器
使用PIC单片机进行LED闪烁的编程步骤使用LATx寄存器- 将内部振荡器设置为8Mhz频率。
- 使用TRISx寄存器将PORTC的方向设置为输出。
- 在while循环中,使用LATx寄存器打开和关闭LED。
使用PORTx寄存器- 将内部振荡器设置为8Mhz频率。
- 使用TRISx寄存器将PORTC的方向设置为输出。
- 在while循环中,使用PORTx Reigister打开和关闭LED。
Using LATx Register
- /*
- Led blinking using PIC18F4550
- */
- #include “Configurations_Header_File.h” //Header file for Configuration Bits
- #include <pic18f4550.h> //Header file PIC18f4550 definitions
- void MS_delay(unsigned int);
- void main()
- {
- OSCCON=0x72; //SET internal oscillator of 8MHz Frequency
- TRISC=0x00; //Set direction of PORTC as OUTPUT to which LED is connected using TRISC register
- while(1)
- {
- LATC = 0xFF; //Turn ON LED for 200 ms
- MS_delay (200); // 200 milisecond Delay
- LATC = 0x00; //Turn OFF LED for 200 ms
- MS_delay (200); // 200 milisecond Delay
- }
- }
- void MS_delay(unsigned int val)
- {
- unsigned int i,j;
- for(i=0;i<val;i++)
- for(j=0;j<165;j++); //This loop Provide delay of 1 ms
- }
Using PORTx Register
- /*
- Led blinking using PIC18F4550
- */
- #include “Configurations_Header_File.h” //Header file for Configuration Bits
- #include <pic18f4550.h> //Header file PIC18f4550 definitions
- void MS_delay(unsigned int);
- void main()
- {
- OSCCON=0x72; //SET internal oscillator of 8MHz Frequency
- TRISCbits.TRISC0=0; //Set direction of PORTC as OUTPUT to which LED is connected
- while(1)
- {
- PORTCbits.RC0=1; //Turn ON LED for 200 ms
- MS_delay (200); // 200 milisecond Delay
- LATC = 0x00; //Turn OFF LED for 200 ms
- MS_delay (200); // 200 milisecond Delay
- }
- }
- void MS_delay(unsigned int val)
- {
- unsigned int i,j;
- for(i=0;i<val;i++)
- for(j=0;j<165;j++); //This loop Provide Delay of 1 ms
- }
使用了不同的寄存器,实现了同样的IO控制,你还知道他们的关系吗?
|