📄 vidu4-1.c
字号:
/*******************************************************************************
; Vidu4-1.c la chuong trinh viet bang C30 de chay tren mot dsPIC *
; Chuong trinh thuc hien viec sau: Xuat chuoi ky tu 'Xin chao!' ra cong *
; RS232 sau moi giay (1 Hz) *
;*******************************************************************************
; Tac gia : Nguyen Quang Nam *
; Don vi : PIC Viet Nam *
; Ten tap tin : Vidu4-1.c *
; Ngay : 25/08/2006 *
; Phien ban : 0.01 *
; Nhung tap tin can thiet khac: p30F4012.gld, p30f4012.h *
; Cong cu duoc dung: MPLAB 7.31 *
; C30 2.02 SE *
; ASM30 2.14 *
; LNK30 2.14 *
------------------------------------------------------------------------------*/
#include "p30f4012.h"
_FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI);
_FGS(CODE_PROT_OFF);
//Cac prototype cho cac chuong trinh con
void Init_TMR1(void);
void Init_UART1_Module(void);
//Bang hang so trong ROM
const unsigned char __attribute__ ((space(psv), address (0x0200)))
Chuoi1[] = "Xin chao! \0";
//Cac bien toan cuc
unsigned char flag, idx;
//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
Init_TMR1(); //Khoi tao Timer 1
Init_UART1_Module(); //Khoi tao module UART1
_PSV=1;
PSVPAG = __builtin_psvpage(Chuoi1);
flag = 0; //Xoa co bao het thoi gian cho
while (1) {
if (flag) { //Cho den khi het thoi gian cho
idx = 0;
while (Chuoi1[idx]) { //Neu chua het chuoi thi
U1TXREG = Chuoi1[idx++]; //Xuat tiep 1 ky tu
while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu
};
flag = 0;
};
};
}
//Chuong trinh con khoi tao module UART1
void Init_UART1_Module(void) {
U1MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit
U1STA = 0x0400; //bit10=UTXEN
U1BRG = (((8000000/38400)/16)-1); //38400 bps @ Fcy = 8 MHz
}
//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips
void Init_TMR1(void) {
TMR1 = 0; //Xoa so dem trong TMR1
PR1 = 0x7A12; //Nguong tran la 1 giay tuong ung voi clock = 32 MHz
_T1IF = 0; //Xoa co ngat cua Timer 1
T1CON = 0x8030; //Dung fcy lam clock, prescale = 1:256
_T1IE = 1; //Cho phep ngat khi Timer 1 tran
}
//Chuong trinh xu ly ngat Timer 1
void _ISR _T1Interrupt(void) {
_T1IF = 0; //Xoa co ngat
flag = 1; //Bat co cho phep xuat chuoi ky tu
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -