⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funchw.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
//#include "includes.h"
#include <p18cxxx.h>
#include "includes.h"
#include "comstruct.h"
#include "hardware.h"
#include "devuart0.h"

//extern MCNM_FILE	SystemFile;
extern INT16U uart0_ioctl(INT8U, INT24U);

extern OS_MEM			*pMemSml;
extern OS_MEM			*pMemLge;
extern OS_EVENT	*rom peventDEBUG;
extern OS_EVENT	*rom peventWICResp;
extern OS_EVENT	*rom peventHardware;
extern OS_EVENT	*rom peventDVS;
extern OS_EVENT	*rom peventWICCmd;
extern OS_EVENT	*rom peventTimer;
extern OS_EVENT	*rom peventPPPReceiver;


//zwm for debug
extern unsigned char DebugReadLength;
extern unsigned char DebugContent[48];

extern INT8U rom ModuleMod;

extern void Do_Key_Init(void);
extern unsigned char Key_Scan(void);

#pragma romdata EXTRAM

extern INT8U chrCOMBusy;

extern INT8U CurRxNum;
extern INT8U rom * pCurRxTail;
extern INT8U rom * pCurRxHead;
extern INT16U intCurTxNum;
extern INT8U rom * pCurTxHead;
extern INT8U ComCurStt;



#pragma romdata COMMODE_P = 0x131e00
volatile unsigned char rom ComCtl;

#pragma code MYCODE
/***********************************************Board test******************************************************/
void Func_Trap(void){
	for(;;){
	}
}

/***************************************************************************************************************/

void Func_Brd_Init(void){
	//Init the oscillator system
	PSPCONbits.CMLK1 = 1;
	PSPCONbits.CMLK0 = 1;
	OSCCON = 0b00000000;	//Disable the PLL, use primary oscillator input
	Nop();					//Wait until the lock closed
	Nop();
	//Init the external memory interface and chip select pins
	PSPCONbits.CMLK1 = 1;
	PSPCONbits.CMLK0 = 1;
	MEMCON = 0b00110000;	//0b00110000;
	Nop();					//Wait until the lock closed
	Nop();
	PSPCONbits.CMLK1 = 1;	
	PSPCONbits.CMLK0 = 1;
	CSEL2 = 0x80;			//External RAM, 128K bytes start from 0x100000
	Nop();					//Wait until the lock closed
	Nop();
	PSPCONbits.CMLK1 = 1;
	PSPCONbits.CMLK0 = 1;
	CSELIO=0x98;			//IO address 8k bytes start from 0x130000

	T0CONbits.TMR0ON = 0;		//Disable timer0

	T2CON = 0b01111001;

	//Set I/O pins to proper direction
	//If the function of pins is changed, this part shall be modified
	//PortA
	TRISAbits.TRISA0 = PA0_DIRECT;
	//TRISAbits.TRISA1 = PA1_DIRECT;
	TRISAbits.TRISA2 = PA2_DIRECT;
	TRISAbits.TRISA3 = PA3_DIRECT;
	TRISAbits.TRISA4 = PA4_DIRECT;
	TRISAbits.TRISA5 = PA5_DIRECT;

	//PortB
	TRISBbits.TRISB0 = PB0_DIRECT;
	TRISBbits.TRISB1 = PB1_DIRECT;
	TRISBbits.TRISB2 = PB2_DIRECT;
	TRISBbits.TRISB3 = PB3_DIRECT;
	TRISBbits.TRISB4 = PB4_DIRECT;
	//TRISBbits.TRISB5 = PB5_DIRECT;
	//leave RB6, RB7 for debug pins

	//PortC
	TRISCbits.TRISC0 = PC0_DIRECT;
	TRISCbits.TRISC1 = PC1_DIRECT;
	TRISCbits.TRISC2 = PC2_DIRECT;
	//RC3, RC4 for I2C 
	TRISCbits.TRISC5 = PC5_DIRECT;
	//RC6, RC7 for USART

	//PortD	as system bus
	//PortE as system bus
	
	//PortF
	//TRISFbits.TRISF0 = PF0_DIRECT;
	//TRISFbits.TRISF1 = PF1_DIRECT;
	//TRISFbits.TRISF2 = PF2_DIRECT;
	TRISFbits.TRISF3 = PF3_DIRECT;
	TRISFbits.TRISF4 = PF4_DIRECT;
	TRISFbits.TRISF5 = PF5_DIRECT;
	//TRISFbits.TRISF6 = PF6_DIRECT;
	//TRISFbits.TRISF7 = PF7_DIRECT;

	//PortG as system bus control

	//PortH
	//RH0~RH3 as system bus
	//TRISHbits.TRISH4 = PH4_DIRECT;
	TRISHbits.TRISH5 = PH5_DIRECT;
	TRISHbits.TRISH6 = PH6_DIRECT;
	TRISHbits.TRISH7 = PH7_DIRECT;
	//
	ADCON1 = 0x0f;	//Set all PORT pins digital
}


void Func_Start_TMR1(void){
	IPR1bits.TMR1IP = 0;	//set timer1 interrupt low priority
	T1CON = 0b10110101;
	TMR1H = 0xfb;
	TMR1L = 0xa0;
	PIE1bits.TMR1IE = 1;	//Enable timer1 interrupt
}

unsigned char Func_ChangeCOMMode(unsigned char mode){
	if(mode > 3) return (1);	//error mode
	OS_ENTER_CRITICAL();
	ComCtl = mode;
	uart0_ioctl(UART_CLRBUF,0);
	ComCurStt = mode;
	OS_EXIT_CRITICAL();
}

unsigned char Func_ReadCOMMode(void){
	return (ComCurStt);
}

void Func_ResetWM(void){
	unsigned int i;
	RST_WL = 1;
	for(i=0;i<1000;i++){
		Nop();
	}
	RST_WL = 0;
	RST_WL2 = 1;
}

void Func_SetVoiceCh(INT8U ctl){
	if (ctl == VOX_HANDFREE){
		EN_HS = 0;
		EN_HF = 1;
	}
	else if (ctl == VOX_HANDSET){
		EN_HS = 1;
		EN_HF = 0;
	}
	else{
		EN_HS = 0;
		EN_HF = 0;
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -