4
7
134
注册会员
#include "reg51.h" //包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义 #include "intrins.h" #define MAIN_Fosc 24000000L //定义主时钟 typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; //手动输入声明"reg51.h"头文件里面没有定义的寄存器 sfr TH2 = 0xD6; sfr TL2 = 0xD7; sfr IE2 = 0xAF; sfr INT_CLKO = 0x8F; sfr AUXR = 0x8E; sfr AUXR1 = 0xA2; sfr P_SW1 = 0xA2; sfr P_SW2 = 0xBA; sfr S2CON = 0x9A; sfr S2BUF = 0x9B; sfr ADC_CONTR = 0xBC; //带AD系列 sfr ADC_RES = 0xBD; //带AD系列 sfr ADC_RESL = 0xBE; //带AD系列 sfr ADCCFG = 0xDE; sfr P4 = 0xC0; sfr P5 = 0xC8; sfr P6 = 0xE8; sfr P7 = 0xF8; sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain sfr P0M1 = 0x93; sfr P0M0 = 0x94; sfr P2M1 = 0x95; sfr P2M0 = 0x96; sfr P3M1 = 0xB1; sfr P3M0 = 0xB2; sfr P4M1 = 0xB3; sfr P4M0 = 0xB4; sfr P5M1 = 0xC9; sfr P5M0 = 0xCA; sfr P6M1 = 0xCB; sfr P6M0 = 0xCC; sfr P7M1 = 0xE1; sfr P7M0 = 0xE2; sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit P03 = P0^3; sbit P04 = P0^4; sbit P05 = P0^5; sbit P06 = P0^6; sbit P07 = P0^7; sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit P14 = P1^4; sbit P15 = P1^5; sbit P16 = P1^6; sbit P17 = P1^7; sbit P20 = P2^0; sbit P21 = P2^1; sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4; sbit P25 = P2^5; sbit P26 = P2^6; sbit P27 = P2^7; sbit P30 = P3^0; sbit P31 = P3^1; sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; sbit P36 = P3^6; sbit P37 = P3^7; sbit P40 = P4^0; sbit P41 = P4^1; sbit P42 = P4^2; sbit P43 = P4^3; sbit P44 = P4^4; sbit P45 = P4^5; sbit P46 = P4^6; sbit P47 = P4^7; sbit P50 = P5^0; sbit P51 = P5^1; sbit P52 = P5^2; sbit P53 = P5^3; sbit P54 = P5^4; sbit P55 = P5^5; sbit P56 = P5^6; sbit P57 = P5^7; #define ADCTIM (*(unsigned char volatile xdata *)0xfea8) u16 Get_ADC12bitResult(u8 channel) //channel = 0~15 { ADC_RES = 0; ADC_RESL = 0; ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel; //启动 AD 转换 _nop_(); _nop_(); _nop_(); _nop_(); while((ADC_CONTR & 0x20) == 0) ; //wait for ADC finish ADC_CONTR &= ~0x20; //清除ADC结束标志 return (((u16)ADC_RES << 8) | ADC_RESL); } /**********************************************/ void main(void) { u16 j; P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能 P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口 P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口 P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口 P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口 P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口 P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口 P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口 P1M1 = 0x40; P1M0 = 0x00; //设置 P1.6 为 ADC 输入口 ADCTIM = 0x3f; //设置 ADC 内部时序,ADC采样时间建议设最大值 ADCCFG = 0x2f; //设置 ADC 时钟为系统时钟/2/16 ADC_CONTR = 0x80; //使能 ADC 模块 EA = 1; //打开总中断 Get_ADC12bitResult(15); //先读一次并丢弃结果, 让内部的采样电容的电压等于输入值. j = Get_ADC12bitResult(15); //读外部电压ADC j++; } 复制代码
while((ADC_CONTR & 0x20) == 0) ; //wait for ADC finish复制代码
使用道具 举报 送花
3
1160
1031
等待验证会员
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-5-1 23:56 , Processed in 0.134425 second(s), 58 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.