標題: 開啟PIC單片機學(xué)習(xí)之路,記錄PIC單片機的學(xué)習(xí)的點點滴滴,與大家分享 [打印本頁]
作者: bbxyliyang 時間: 2019-10-12 21:10
標題: 開啟PIC單片機學(xué)習(xí)之路,記錄PIC單片機的學(xué)習(xí)的點點滴滴,與大家分享
本帖最后由 bbxyliyang 于 2019-10-12 21:12 編輯
第一天PIC單片機編譯環(huán)境的安裝
網(wǎng)上關(guān)于PIC單片機的入門或者學(xué)習(xí)資料相對較少,不像STM32、AVR或者51單片機那樣豐富,所以我記錄下我學(xué)習(xí)PIC單片機的點點滴滴,與大家共享下,技術(shù)在于交流,如我寫的錯誤的地方,希望大家指正。
來介紹一下我所使用的平臺信息、調(diào)試工具。
PIC單片機型號:PIC16F887
開發(fā)環(huán)境:MPLAB X IDE v3.30
下載工具:PIC Kit 3.5
一、 安裝開發(fā)環(huán)境
我是直接在官網(wǎng)(www.microchip.com)上下載的MPLAB X IDE v3.30版本,400多兆,應(yīng)該是最新版本了,安裝過程中使用推薦選項就可以,還安裝了一個XC8編譯器(XC8_V1.31破解版)。如果大家需要軟件,可以聯(lián)系我們震撼科技工作室,QQ 515580142,我們可以把軟件發(fā)給你。給大家介紹下我們震撼科技工作室,我們是幾個剛大學(xué)畢業(yè)大學(xué)生創(chuàng)立,主要承接各種單片機設(shè)計制作,如原理圖設(shè)計、電路板PCB繪制、單片機程序代寫、實物制作等相關(guān)軟硬件開發(fā)。 二、 新建項目
1、我安裝開發(fā)環(huán)境的時候,選擇了中文版本,進入開發(fā)環(huán)境后,點擊:文件->新建項目,彈出如下界面:選擇獨立項目,然后點下一步。
1.png (73.25 KB, 下載次數(shù): 184)
下載附件
2019-10-12 21:06 上傳
步驟一
2、點擊下一步后彈出如下界面:選擇你使用的單片機型號,這里我使用的是PIC16F887單片機。
2.png (66.18 KB, 下載次數(shù): 211)
下載附件
2019-10-12 21:06 上傳
步驟二
3、繼續(xù)點下一步,這里選擇調(diào)試/下載工具,我使用的是PICkit3。
3.png (69.95 KB, 下載次數(shù): 198)
下載附件
2019-10-12 21:06 上傳
步驟三
4、下一步,這一步選擇的是編譯器,選擇XC8編譯器。
4.png (75 KB, 下載次數(shù): 195)
下載附件
2019-10-12 21:06 上傳
步驟四
5、最后一步,選擇項目的保存目錄,編碼這里選擇的是GB2312,這樣做的目的是使項目中的中文字符能夠被識別,否則,添加中文注釋時會出現(xiàn)亂碼。
5.png (74.29 KB, 下載次數(shù): 168)
下載附件
2019-10-12 21:06 上傳
步驟五
6、至此,項目新建完畢,界面如下,項目目錄里面,我們目前只需要關(guān)注頭文件和源文件即可,在頭文件上右鍵可以選擇添加現(xiàn)有的頭文件,源文件同理。
6.jpg (82.59 KB, 下載次數(shù): 190)
下載附件
2019-10-12 21:06 上傳
7、文件添加完成后,點擊編譯按鈕 進行編譯,編譯通過后會在環(huán)境下方提示編譯信息,
6.png (19.43 KB, 下載次數(shù): 182)
下載附件
2019-10-12 21:06 上傳
8、 編譯成功后,可以進行下載和在線調(diào)試,下載按鈕 用于將程序下載到單片機內(nèi)部,調(diào)試按鈕 用于在線調(diào)試程序,注意,點擊調(diào)試按鈕程序不會下載到單片機內(nèi)。
注意接下來以測試程序來講解這款單片機的使用,在此之前先來了解一下《配置位》,在開發(fā)環(huán)境中,點擊運行窗口->PIC存取器視圖->配置位,即可在環(huán)境下方調(diào)出配置窗口,Option下面的定義可以修改,
7.png (92.69 KB, 下載次數(shù): 201)
下載附件
2019-10-12 21:06 上傳
這里說一下時鐘配置和看門狗配置,F(xiàn)OSC用于配置系統(tǒng)時鐘,WDTE用于看門狗的配置,如果你想使用外部晶振就選擇XT即可,同理,看門狗的開啟和關(guān)閉,以及開啟后的設(shè)置也可以通過WDTE來配置,這里我們選擇關(guān)閉看門狗,只需將WDT選項選擇為OFF即可,注意,這里選擇好之后,必須點擊輸出生成源代碼,會自動生成源碼,生成的源碼拷貝到你的項目文件中才有效。
至于一些詳細的配置請自行參見手冊。
7.jpg (36.9 KB, 下載次數(shù): 197)
下載附件
2019-10-12 21:06 上傳
生成代碼
-
-
PIC單片機編譯環(huán)境的安裝.doc
2019-10-12 20:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
793.5 KB, 下載次數(shù): 72, 下載積分: 黑幣 -5
作者: taotie 時間: 2019-10-13 09:49
個人看法:
呵呵~~麻煩!不如用Proteus 8 配置xc8編譯器爽快。
作者: bbxyliyang 時間: 2019-10-13 10:05
第二天開始第一個程序
今天的任務(wù),點亮一個LED,和編寫一個流水燈程序。我們直接進入主題,先介紹下PIC單片機I/O口,I/O端口的寄存器復(fù)位后,默認為輸入(輸出高阻態(tài)),每一路I/O有方向控制寄存器TRISA~E和數(shù)據(jù)寄存器PORTA~E,為了實現(xiàn)I/O端口的功能必需先對端口進行初始化設(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口提供的總灌電流和總拉電流可達150mA和100mA;其他端口為80mA和50mA;五個端口驅(qū)動電流之和不大于200mA。3、輸出電平轉(zhuǎn)換的延時,PIC單片機是一款高速單片機,當(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單片機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);
}
}
作者: bbxyliyang 時間: 2019-10-13 10:42
taotie 發(fā)表于 2019-10-13 09:49
個人看法:
呵呵~~麻煩!不如用Proteus 8 配置xc8編譯器爽快。
您好,這方面的資料嗎,給我們分享下!
作者: taotie 時間: 2019-10-14 09:34
在這個頁面添加編譯器路徑就可以了~~
捕獲.PNG (151.5 KB, 下載次數(shù): 167)
下載附件
2019-10-14 09:33 上傳
作者: bbxyliyang 時間: 2019-10-15 17:19
第三天 定時器的學(xué)習(xí)
3.1 定時/計數(shù)器功能
3.1.1定時功能
所謂定時功能就是通過來自單片機內(nèi)部的時鐘脈沖作計數(shù)脈沖,使計數(shù)器計數(shù),即每個機器周期計數(shù)器加1,計數(shù)值達到予置值后,定時/計數(shù)模塊產(chǎn)生溢出。
3.1.2計數(shù)器功能
所謂計數(shù)是指對外部事件進行計數(shù)。外部事件的發(fā)生以輸入脈沖表示,因此計數(shù)功能的實質(zhì)就是對外來脈沖進行計數(shù)。
3.2定時器應(yīng)用的方法
在單片機中,每一個中斷源都有一個相應(yīng)的中斷標志位,該中斷標志將占據(jù)中斷控制寄存器的一位,該中斷標志位置1,就意味著有中斷信號產(chǎn)生并向MCU申請中斷,但這不代表MCU一定響應(yīng)該中斷。響應(yīng)一個中斷請求的條件:
響應(yīng)A中斷=全局中斷允許標志(由用戶軟件設(shè)置)AND中斷A允許標志位(由用戶軟件設(shè)置)AND中斷A標志位(由用戶軟件設(shè)置或者符合中斷條件時由硬件自動設(shè)置)。
我們今天的目的就是學(xué)習(xí)PIC單片機定時器0,實現(xiàn)讓LED燈每隔1S亮一次。
接下來我們分析一下,指令周期就是單片機執(zhí)行一個指令所花費的時間。這也是定時器定時的最小時間單位。時鐘頻率/4=指令頻率。1/指令頻率=指令周期。假設(shè)現(xiàn)在的時鐘是4MHZ ,4MHz的時鐘經(jīng)過4分頻后變成了 1MHz 其周期為0.0000001s也就是1us,這個1us就是指令周期,這1us也就是定時器定時的最小單位。
1、定時器與預(yù)分頻器
假設(shè)在沒有預(yù)分頻器情況下。開啟定時器每隔一個指令周期定時器就加一。假設(shè)時鐘是4MHz 也就是每隔 1us 定時器加一。如果有了預(yù)分頻器假設(shè)預(yù)分頻器設(shè)置成2分頻,定時器就 每隔2個指令周期定時器加一。如果預(yù)分頻器設(shè)置成4分頻,定時器就 每隔4個指令周期定時器加一,以此類推。
2、定時器中斷標志位
如: TMR0 這個是8位的定時器,也就是8位的寄存器。8位的寄存器能代表的數(shù)值為0~255.也就是說定時器可以從0開始加一直加到255.到255后再加一就又變成0。此時TMR0定時器中斷標志位 (TMR0IF)變成 1.(如果中斷沒有開啟,并不執(zhí)行中斷程序。)
3、實例說明:
假設(shè)時鐘周期為4MHZ,每隔1秒點亮LED,每1秒滅掉LED。這樣的程序要如何做到呢。
1、得到指令周期
4MHz/4=1MHz
1/1MHz=0.0000001s=1us
2、得到預(yù)分頻
定時器定時的最大時間=預(yù)分頻*256。256X256=65536us=65.536ms這里面我們選擇50ms。
3、計算定時器初始值=(定時器最大值+1)-(定時時間/預(yù)分頻)。
255+1=256
50000/256=195.3125
256-195.3125=60.6875 四舍五入,定時器初始值為61
接下來我們就要開始編程,編程之前,我們講下,幾個重要的寄存器。
3-1.png (30 KB, 下載次數(shù): 180)
下載附件
2019-10-15 17:18 上傳
3-2.png (47.85 KB, 下載次數(shù): 181)
下載附件
2019-10-15 17:18 上傳
3-3.png (22.54 KB, 下載次數(shù): 174)
下載附件
2019-10-15 17:18 上傳
#include "pic.h"
//********************函數(shù)定義*********************
//*************** 主程序 ********************
void main(void)
{
PSA=0; //PSA等于0,分頻
PS0=1;
PS1=1;
PS2=1;
T0CS=0; //設(shè)為定時方式
TMR0=61; //設(shè)定定時初值
GIE=1; //總中斷允許
T0IE=1; //TMR0中斷允許
TRISC=0; //PORTC設(shè)置為輸出
PORTC=0x0ff; //PORTC輸出1
while(1)
{
}
}
//*********************中斷服務(wù)程序******************
void interruptisr(void)
{
static uint tmr0_count=0;
if(T0IE&&T0IF) //判斷是否為TMR0中斷
{
T0IF=0; //清TMR0中斷標志位(必須用軟件清零)
TMR0=61; //TMR0重新賦初值
if(++tmr0_count>=20) //定時20次,就是1秒
{
tmr0_count=0;
PORTC=~PORTC;
}
}
}
作者: f15067460282 時間: 2019-10-17 08:57
給你 點贊 一起學(xué)習(xí)
作者: f15067460282 時間: 2019-10-17 09:08
等你繼續(xù)更新
作者: son2011 時間: 2019-10-17 10:22
我也是才開始學(xué)PIC,多多交流
作者: bbxyliyang 時間: 2019-10-17 23:11
son2011 發(fā)表于 2019-10-17 10:22
我也是才開始學(xué)PIC,多多交流
技術(shù)在于交流,我會繼續(xù)更新下去!幫助需要幫助的人!
作者: bbxyliyang 時間: 2019-10-17 23:15
f15067460282 發(fā)表于 2019-10-17 09:08
等你繼續(xù)更新
好的,技術(shù)在于交流,我會繼續(xù)更新下去,希望能幫助需要幫助的人!
作者: bbxyliyang 時間: 2019-10-20 09:36
這幾天比較忙,沒有跟時間更新,我把前3章WORD上傳下,方便大家學(xué)習(xí)。
-
-
PIC單片機從入門到精通.doc
2019-10-20 09:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.21 MB, 下載次數(shù): 57, 下載積分: 黑幣 -5
作者: areskkkk 時間: 2019-11-27 18:33
繼續(xù)師兄
作者: bbxyliyang 時間: 2019-12-6 21:12
最近太忙了
作者: qxdqx 時間: 2019-12-22 10:14
多謝分享!很好的資料.
作者: bbxyliyang 時間: 2021-8-18 11:19
技術(shù)在于分享,希望可以幫助需要的人
作者: cczjw 時間: 2021-9-19 16:27
謝謝!很有幫助!
作者: cczjw 時間: 2021-9-19 16:30
本帖最后由 cczjw 于 2021-9-19 22:34 編輯
期望繼續(xù)。謝謝!請問 kit3.5 是否包含了 kit2 的全部功能?
作者: cczjw 時間: 2021-9-20 08:03
請教,proteus 8.3 在win10下安裝后怎么器件庫不全的呢?比如 沒找到 LED和直插件的小功率電阻呢?這個版本在XP下是正常的。謝謝!
作者: bbxyliyang 時間: 2021-9-20 16:12
客氣,技術(shù)在于分享。
作者: bbxyliyang 時間: 2021-9-20 16:13
這個我也沒過多的研究這方面的,給不了你什么幫助。
作者: bbxyliyang 時間: 2021-9-20 16:15
W10估計有局限性,可以安裝更高的版本,高版本里面的庫比較全一點,也有很多新添加的庫,如proteus8.9版本。
作者: taotie 時間: 2021-12-3 08:03
在proteus8里這是最基本的
點擊 P字符彈出對話框
搜 rse---電阻
搜 led---發(fā)光二極管
作者: taotie 時間: 2021-12-3 09:22
本帖最后由 taotie 于 2021-12-3 09:39 編輯
晶振只接一個腳?
uchar position=0;
if(++position>=8)
postion=0;?
小老弟學(xué)習(xí)不認真
作者: h168 時間: 2021-12-3 12:00
好貼,通俗易懂
作者: bbxyliyang 時間: 2022-7-18 20:34
2.png (22.44 KB, 下載次數(shù): 105)
下載附件
2022-7-18 20:33 上傳
#define _XTAL_FREQ 4000000 //晶振定義
#include<pic.h> //頭文件包含
//__CONFIG(0x3b31);//芯片配置字定義
// CONFIG1
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown Out Reset Selection bits (BOR enabled)
#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)
// CONFIG2
#pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off)
//宏定義
#define uchar unsigned char
#define uint unsigned int
#define RS RC0 //命令數(shù)據(jù)選擇
#define RW RC1 //讀寫選擇
#define EN RC2 //使能
uint count=0;
uchar miao,fen,shi;
/*******************延時函數(shù)部分******************
大約延時1ms
************************************************/
void delayms(uint ms)
{
uchar i,j;
for(j=ms;j>0;j--)
for(i=110;i>0;i--);
}
/*******************1602發(fā)送主函數(shù)******************
************************************************/
void LCD_WRITE(uchar data,uchar com)
{
RS=com;//1表示數(shù)據(jù);0表示命令
PORTD=data;//將數(shù)據(jù)寫入
delayms(5);//延時
EN=1;//使能
delayms(5);//延時
EN=0;//關(guān)閉
}
/*******************1602顯示主函數(shù)******************
//指定位置顯示字符
//輸入:列地址X(0~15),行地址y(0~1)
// 字符串指針*p,要顯示的字符個數(shù)num
************************************************/
void disp_1602(uchar x,uchar y,uchar *p,uchar num)
{
uchar i;
for(i=0;i<num;i++)
{
if(0==y)
x|=0x80;//第一行地址為0x80
else
x|=0xc0;//第二行地址為0xC0
LCD_WRITE(x,0); //寫地址命令
LCD_WRITE(*p,1);//寫數(shù)據(jù)
x++;//地址加
p++;//顯示字符地址加
}
}
/*******************初始化函數(shù)部分******************
************************************************/
void LCD_init(void)
{
// ADCON1=0x07;//定義RE為數(shù)據(jù)口
TRISC0=0;
TRISC1=0;
TRISC2=0;//RE口為輸出
RC0=0;
RC1=0;
RC2=0;//初始化輸出低電平
TRISD=0;//D口為輸出
PORTD=0;//輸出0
LCD_WRITE(0x38,0);//設(shè)置8位總線,雙行顯示
LCD_WRITE(0x01,0);//清屏
LCD_WRITE(0x0c,0);//開顯示,關(guān)光標
LCD_WRITE(0x06,0);//光標右移
LCD_WRITE(0x80,0);//第一行顯示位置
}
/*******************主程序函數(shù)******************
************************************************/
void main(void)
{
LCD_init();//端口初始化
T1CKPS0=1;
T1CKPS1=1; //前置分頻器8分頻
TMR1CS=0; //TMR1工作于定時器方式
TMR1L=(65536-12500)%256; //定時12500個時鐘
TMR1H=(65536-12500)/256;
GIE=1; //總中斷允許
PEIE=1; //外圍功能模塊中斷允許
TMR1IE=1; //TMR1中斷允許
TMR1ON=1; //啟動TMR1
while(1)
{
disp_1602(0,0,"Time:",5);//第一行顯示temp:
delayms(20);
LCD_WRITE(0x80+5,0); //寫地址命令
LCD_WRITE(shi/10+0x30,1);//寫數(shù)據(jù)
LCD_WRITE(shi%10+0x30,1);//寫數(shù)據(jù)
LCD_WRITE(':',1);//寫數(shù)據(jù)
LCD_WRITE(fen/10+0x30,1);//寫數(shù)據(jù)
LCD_WRITE(fen%10+0x30,1);//寫數(shù)據(jù)
LCD_WRITE(':',1);//寫數(shù)據(jù)
LCD_WRITE(miao/10+0x30,1);//寫數(shù)據(jù)
LCD_WRITE(miao%10+0x30,1);//寫數(shù)據(jù)
}
}
//*********************中斷服務(wù)程序******************
void interrupt isr(void)
{
if(TMR1IE&&TMR1IF) //判斷是否為TMR1中斷
{
TMR1L=(65536-12500)%256;
TMR1H=(65536-12500)/256;
TMR1IF=0; //清TMR1中斷標志位(必須用軟件清零)
count++;
if(count==10)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}
}
作者: hjx5548 時間: 2023-2-26 06:35
能不能用定時器做個1秒定時
作者: bbxyliyang 時間: 2023-3-5 13:25
可以的
作者: 量子工業(yè) 時間: 2023-8-24 11:53
這個版本和哪個版本的win兼容性最好呢
作者: bbxyliyang 時間: 2023-11-22 14:46
我用的W10,一直沒出啥問題
作者: Porclaude 時間: 2023-11-22 20:28
ça m'aide beaucoup merci
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |