AD口用作IO口(帮忙注释一下)
时间:10-02
整理:3721RD
点击:
#include <hidef.h> //工程通用的宏文件
#include "derivative.h" //单片机硬件型号文件
/*************************************************************/
/* 延时函数 */
/*************************************************************/
void delayms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<1335;jj++);
}
/*************************************************************/
/* PLL初始化 */
/*************************************************************/
void INIT_PLL(void)
{
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=0;
SYNR=0x00|0x01;
REFDV=0x80 | 0x01;
POSTdiv=0x00;
PLLCTL_PLLON=1;
_asm(nop);
_asm(nop);
while(CRGFLG_LOCK==0);
CLKSEL_PLLSEL =1;
}
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void)
{
unsigned char LedCnt=0;
INIT_PLL();
DDRB=0xff;
DDRA=0xff;
PORTA=0X00;
PORTB=0X00;
DDR1AD0=0X00;
ATD0DIEN=0XFF;
DisableInterrupts;
delayms(500);
for(;;)
{
if(PT1AD0_PT1AD07)
{
PORTB_PB0=0;
PORTA_PA0=0;
}
else
{
PORTB_PB0=1;
PORTA_PA0=1;
}
delayms(500);
}
}
#include "derivative.h" //单片机硬件型号文件
/*************************************************************/
/* 延时函数 */
/*************************************************************/
void delayms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<1335;jj++);
}
/*************************************************************/
/* PLL初始化 */
/*************************************************************/
void INIT_PLL(void)
{
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=0;
SYNR=0x00|0x01;
REFDV=0x80 | 0x01;
POSTdiv=0x00;
PLLCTL_PLLON=1;
_asm(nop);
_asm(nop);
while(CRGFLG_LOCK==0);
CLKSEL_PLLSEL =1;
}
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void)
{
unsigned char LedCnt=0;
INIT_PLL();
DDRB=0xff;
DDRA=0xff;
PORTA=0X00;
PORTB=0X00;
DDR1AD0=0X00;
ATD0DIEN=0XFF;
DisableInterrupts;
delayms(500);
for(;;)
{
if(PT1AD0_PT1AD07)
{
PORTB_PB0=0;
PORTA_PA0=0;
}
else
{
PORTB_PB0=1;
PORTA_PA0=1;
}
delayms(500);
}
}
只会玩PIC,PIC中也要看芯片型号来确定是I/O还是A/D,具体根据芯片手册来决定
举两个例子,一个是16F87X系列,ADCON1 = 0x07,A口设置为I/O口.一个是16F88X系列,ANSEL = 0;A口为I/O口...ANSELH = 0;B口为I/O口.不看芯片手册的伤不起,其他种类的单片机应该也差不多的方式,主要看芯片手册.
唉,好吧。。
有个专门的寄存器 可以把IO口数字化的 每款PIC是不一样的