發表文章

目前顯示的是有「單晶片」標籤的文章

PIC 中斷程式寫法

圖片
程式碼的框架如下 #include < myapp.h > void HISR(); // 高優先權中斷服務常式宣告 void LISR(); // 低優先權中斷服務常式宣告 #pragma config PBADEN = OFF // 將 Port B 類比輸入的功能關閉 // 設定為數位輸入 #pragma code P008 = 0x000008 // 將高優先權中斷服務常式的位置固定在 0x0008 void P008(void) { _asm goto HISR _endasm; // 因空間有限,故跳到實際的中斷服務常式 } #pragma code P018 = 0x000018 // 將低優先權中斷服務常式的位置固定在 0x0018 void P018(void) { _asm goto LISR _endasm; // 跳到實際的中斷服務常式 } #pragma code // 固定程式碼結束標記 #pragma interrupt HISR // 宣告此函式為中斷服務常式,會自動保存暫存器 void HISR() // 並以中斷的方式返回 (重啟 GIE) { CLR(INTCON,BIT1); // 清除中斷旗標 } #pragma interruptlow LISR void LISR() { CLR(INTCON,BIT1); } void main() { SET(INTCON, BIT7 | BIT6 | BIT4); // 初始化 INT0 中斷 while (1) { } }

PIC 中斷觀察

圖片
今天來觀察一下中斷的工作方式,先到 Debugger | Select Tool | MPLAB SIM 選擇軟體模擬的方式,然後開啟 View | Program Memory ,照以下的說明輸入組合語言程式來觀察一下吧

PIC18x Timer 分享 IV

圖片
這一次我們就來看看 CCP1 的輸出功能

PIC18x Timer 分享 III

圖片
經過 Timer0 的洗禮,會不會覺得 8-bit 的計數太 Low end 呢?還得自己數 125 次才能得到 1ms。接下來讓我們看看 Timer1 + CCP 模組的威力吧! PIC18F4520 Data Sheet (Page 130)

PIC18x Timer 分享 II

圖片
在繼續之前,我們先來看看上次的討論

PIC18x Timer 分享 I

圖片
今天課程的重點是 PIC Timer 的介紹,首先我們來觀察一下 Timer 是怎麼一回事呢?

myapp.h

圖片
#ifndef __MYAPP__ #define __MYAPP__ #include <p18f4520.h> #define BIT0 (1) #define BIT1 (1 << 1) #define BIT2 (1 << 2) #define BIT3 (1 << 3) #define BIT4 (1 << 4) #define BIT5 (1 << 5) #define BIT6 (1 << 6) #define BIT7 (1 << 7) #define SET(reg,b) reg |= (b) #define CLR(reg,b) reg &= ~(b) #define TGL(reg,b) reg ^= (b) #define GET(reg,b) (reg & (b)) typedef enum { FALSE, TRUE } BOOL; // 2012/10/18 add typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned short long uint24; typedef unsigned long int uint32; typedef char int8; typedef int int16; typedef short long int24; typedef long int int32; #endif // __MYAPP__ 由於這是一個共用的標頭檔,建議把它放在專案一個固定的目錄下,例如 D:\PIC18\Include ,則 PIC18 底下的其它專案要引用只要設定 Include 路徑 就可以了,就樣就可以只維護一份最新的,而不用每個專案都要 Copy 一份了 開啟專案後,點選 Project | Build Options | Project ,選擇 Include Search Path ,新增一個 ..\include 即可。這裡用相對路徑而不用絕對路徑是方便將專案移到其它位置時不用再修改一次。

MPLAB 使用心得

圖片
這是單晶片的第一個作業,裡面有一些軟體的操作技巧,所以就順便記錄一下。首先是程式需求: 使用 PIC18F4520 RC0 連接 SW1 (Normal Open),Active Low 動作 RC1 連接 Relay 控制電燈 (或其它電器),Active High 動作 按下 SW1 後電燈亮,Timer1 開始計數 Timer1 計數超過 100 時,將電燈關掉 PS : 這個電路圖是用 LTspice 畫的,因為很多零件找不到,所以就先用其它零件代替來示意了