第二天開始第一個程序 今天的任務(wù),點亮一個LED,和編寫一個流水燈程序。我們直接進(jìn)入主題,先介紹下PIC單片機(jī)I/O口,I/O端口的寄存器復(fù)位后,默認(rèn)為輸入(輸出高阻態(tài)),每一路I/O有方向控制寄存器TRISA~E和數(shù)據(jù)寄存器PORTA~E,為了實現(xiàn)I/O端口的功能必需先對端口進(jìn)行初始化設(shè)置。方向控制寄存器與數(shù)據(jù)寄存器都是8位的,方向控制寄存器中的每一位與數(shù)據(jù)寄存器中的每一位相對應(yīng);方向控制寄存器的相應(yīng)位設(shè)置為1表示輸入;設(shè)置為0表示輸出;端口控制寄存器的相應(yīng)位設(shè)置為1表示輸出高電平,設(shè)置為0表示輸出低電平。 這個需要我們記住。通用I/O接口的輸出設(shè)計要點:1、輸出電平的轉(zhuǎn)換和匹配,我們PIC系統(tǒng)一般工作電源是5V,當(dāng)連接的外圍是9V、12V等于5V不同的電源時,需要考慮輸出電平的轉(zhuǎn)換。2、輸出電流的驅(qū)動能力,每個I/O口允許最大25mA的灌電流和20mA的拉電流,可以直接驅(qū)動LED和繼電器。因各端口結(jié)構(gòu)不同,RB口提供的總灌電流和總拉電流可達(dá)150mA和100mA;其他端口為80mA和50mA;五個端口驅(qū)動電流之和不大于200mA。3、輸出電平轉(zhuǎn)換的延時,PIC單片機(jī)是一款高速單片機(jī),當(dāng)系統(tǒng)晶振為4MHZ時,執(zhí)行一個指令的時間為0.25us,也就是說講一個I/O置1,在置0,只需要0.25us。 (1)LED發(fā)光二級管電流硬件設(shè)計:二極管電流大于5MA,人眼睛就可以明顯的觀察到二極管的發(fā)光,導(dǎo)通電流越大,亮度越高。但最好不要超過10ma,否則可能會將二級管燒壞或IO口燒壞。我們在設(shè)計電路時,需要在電路中串接一個限流電阻,這個電流一般在330-1K之間。
1.png (3.79 KB, 下載次數(shù): 185)
下載附件
2019-10-13 10:03 上傳
(2)軟件設(shè)計,代碼如下: #include<pic.h>//頭文件包含 //芯片配置字定義 #pragmaconfig FOSC = XT // OscillatorSelection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT andRA7/OSC1/CLKIN) #pragmaconfig WDTE = OFF // Watchdog TimerEnable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCONregister) #pragmaconfig PWRTE = OFF // Power-up TimerEnable bit (PWRT disabled) #pragmaconfig MCLRE = ON // RE3/MCLR pinfunction select bit (RE3/MCLR pin function is MCLR) #pragmaconfig CP = OFF // CodeProtection bit (Program memory code protection is disabled) #pragmaconfig CPD = OFF // Data CodeProtection bit (Data memory code protection is disabled) #pragmaconfig BOREN = ON // Brown OutReset Selection bits (BOR enabled) #pragmaconfig IESO = ON // InternalExternal Switchover bit (Internal/External Switchover mode is enabled) #pragmaconfig FCMEN = ON // Fail-SafeClock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled) #pragmaconfig LVP = ON // Low VoltageProgramming Enable bit (RB3/PGM pin has PGM function, low voltage programmingenabled) #pragmaconfig BOR4V = BOR40V // Brown-outReset Selection bit (Brown-out Reset set to 4.0V) #pragmaconfig WRT = OFF // Flash ProgramMemory Self Write Enable bits (Write protection off) voidmain() { // TRISC=0xfe;//11111110,端口操作 // PORTC=0xfe;//00000001 TRISC0=0;//位操作,類似51單片機(jī)sbit RC0=0; while(1); } 實驗效果如下:
2.png (5.86 KB, 下載次數(shù): 183)
下載附件
2019-10-13 10:03 上傳
流水燈程序如下: #include<pic.h> #define uchar unsigned char #define uint unsigned int #pragma config FOSC = XT // Oscillator Selection bits (XToscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDTdisabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRTdisabled) #pragma config MCLRE = ON // RE3/MCLR pin function select bit(RE3/MCLR pin function is MCLR) #pragma config CP = OFF // Code Protection bit (Program memorycode protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Datamemory code protection is disabled) #pragma config BOREN = ON // Brown Out Reset Selection bits (BORenabled) #pragma config IESO = ON // Internal External Switchover bit(Internal/External Switchover mode is enabled) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit(Fail-Safe Clock Monitor is enabled) #pragma config LVP = ON // Low Voltage Programming Enable bit(RB3/PGM pin has PGM function, low voltage programming enabled) #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-outReset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self WriteEnable bits (Write protection off) void delay_ms(uint x) { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } void main(){ uchar position=0; TRISC=0x00;//設(shè)置為輸出方式 while(1) { PORTC=~(1<<postion); if(++position>=8) postion=0; delay_ms(1000); } } |