JASK1000无线开发板中单片机STC89C52换成STC12C5A60S2,是否行得通?电路是否通用?怎么设置STC12C2052AD的IO口怎么设置状态呢,比如输入和输出。

JASK1000无线开发板中单片机STC89C52换成STC12C5A60S2,是否行得通?电路是否通用?



1、JASK1000无线开发板中单片机STC89C52换成STC12C5A60S2,是否行得通?电路是否通用?

STC89C52换成STC12C5A60S2是完全可以的,只是要修改延时函数,因为12C5A是1T的单片机,速度非常快,基本上要快10倍左右,所以要按照时序图,适当的调节延时函数,程序里面的其他语句可以1样不要变动。串口也不要初始化,默认是的情况下和51是1模1样的。



2、怎么设置STC12C2052AD的IO口怎么设置状态呢,比如输入和输出。

#include #include #define uchar unsigned char #define uint unsigned int #define AD_SPEED 0x60 //0110,0000 1 1 270个时钟周期转换1次, /************江苏淮安欢迎您!&&&&布衣欢迎您!******************************/ /***************qq:42814761******壮丽江南,魅力楚州***************************/ // sbit M=P1^5; //过压指示灯 sbit N=P1^3; //欠压指示灯 sbit LED=P1^7; //工作正常灯 sbit CONTRL=P3^4; //输出控制端 sbit PWM=P3^7; /****************************************************************/ void pwm(); void delayms(uint); uint ADC(); void InitADC(); void baohu(); float voltage=0.0; uint V; float VCC=5.05; uchar mtab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***8**************************************************************/ void main() { CONTRL=0;//先关闭输出 delayms(700); V=40; //这些是我差错的时候添上去的。目的在于弄明白到底AD转换了没有。 voltage=4.0;//实践证明,更换数值没用,说明没AD LED=0; CONTRL=1; voltage=V*VCC/256.00*5.00; delayms(1000); PWM=1; CONTRL=1;//继电器工作,是保护状态 delayms(1000); M=0; N=0; LED=0; delayms(2000); M=1; N=1; LED=1; pwm();//产生PWM波形 delayms(7000); delayms(100);//延时 InitADC(); delayms(20); V= ADC(); baohu(); while(1) { V= ADC(); baohu(); delayms(300); } } // // void pwm() { //PCA模块工作于PWM模式 C程序 CMOD = 0x04; //用定时器0溢出做PCA脉冲 CL = 0x00; //PCA定时器低8位 地址:E9H CH = 0x00; //PCA高8位 地址 F9H CCON=0x00; CCAP0L = 0x60; //PWM模式时他俩用来控制占空比 CCAP0H = 0x60; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出) CCAPM0 = 0x42; //0100,0010 Setup PCA module 0 in PWM mode // ECOM0=1使能比较 PWM0=1 使能CEX0脚用作脉宽调节输出 /********************* PCA 模块工作模式设置 (CCAPMn 寄存器 n= 0-34种) 7 6 5 4 3 2 1 0 - ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn 选项: 0x00 无此操作 0x20 16位捕捉模式,由 CEXn上升沿触发 0x10 16位捕捉模式,由CEXn下降沿触发 0x30 16位捕捉模式,由CEXn的跳变触发 0x48 16位软件定时器 0x4c 16位高速输出 0x42 8位PWM输出 每个PCA模块另外还对应两个寄存器:CCAPnH和CCAPnL 。 捕获或者比较时,它们用来 保存16位计数值,当工作于PWM模式时,用来控制占空比 *******************************/ TMOD=0x02; TH0=0x06; TL0=0x06; CR=1; //Start PCA Timer. TR0=1; } //AD转换初始化 ----打开ADC电源 void InitADC() { P1=0xff; ADC_CONTR|=0x80; delayms(80); //这两个寄存器用来设置 P1口4种状态,每1位对应1个P1引脚 ,按状态组合操作 /***************** P1M0 和P1M1 寄存器位 7 6 5 4 3 2 1 0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 同理P3M0 P3M0 也是。因为STC12C2052AD只有两个P口,所以只有这俩组 STC12C5410AD还多P2M0 P1M0 有3组 P1M0 P1M1 高 0 0 普通I0口 (准双向) P1寄存器位 7 6 5 4 3 2 1 0 0 1 强推挽输出 (20MA电流 )尽量少用 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1 0 仅做输入 A/D转换时可用此模式 1 1 开漏 ,A/D转换时可用此模式 例如: 要设置P1.2为 AD 输入口 则 P1M0=0X02 ; P1M1=0X02; 开漏即可 当不用AD时,最好 关闭ADC电源 ,恢复为IO口状态 ********************************/ P1M0=0x02;//这两个寄存器用来设置 P1口4种状态,每1位对应1个P1引脚 ,按状态组合操作 P1M1=0x02;//设置P1.1为开漏状态 } // AD转换程序 /****************************************************** 注意:这个函数里注释的命令是通用命令,可以针对所有AD通道使用,我这就认准了P1.11个通道,所以直接 //赋值,省点"流量"!折磨我的问题就出在这个函数里的while等待语句 while (1) //等待A/D转换结束 { if (ADC_CONTR & 0x10) //0001,0000 测试A/D转换结束否 { break; } }。



3、JASK1000无线开发板中单片机STC89C52换成STC12C5A60S2,是否行得通?电路是否通用?

STC89C52换成STC12C5A60S2是完全可以的,只是要修改延时函数,因为12C5A是1T的单片机,速度非常快,基本上要快10倍左右,所以要按照时序图,适当的调节延时函数,程序里面的其他语句可以1样不要变动。串口也不要初始化,默认是的情况下和51是1模1样的。



4、求基于STC12C4052AD单片机电位器调节PWM控制微型直流电机无级调

用STC单片机做完电压表演示后,很想做1做STC片内A/D转换与PWM的联用,此前曾用过它的PWM功能,是双键控制LED发光管调光的应用,此次决定搞1次电位器调光/调速的实验;器材如下:1.STC12C4052AD单片机最小系统。2.10K可调电阻。3.光驱出/进仓驱动微电机1只。电路图如下:实验程序如下:/********************************************************************** 基于STC单片机的电位器调节微型直流电机无级调速演示程序---wannenggong 程序根据杜洋的程序模板改编 由电位器获得直流变量经片内ADC进行A/D转换,转换值控制片内PWM驱动微电机 **********************************************************************/ #include //单片机头文件 #include //51基本运算(包括_nop_空函数) #define uchar unsigned char #define uint unsigned int uint M; sbit ON=P3^0; /***************************************************************** 函数名:毫秒级CPU延时函数 调 用:DELAY_MS (?); 参 数:1~65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125 /******************************************************************/ void DELAY_MS (uint a){ uint i; while( a-- != 0){ for(i = 0; i < 600; i++); } } /******************************************************************* 函数名:8位A/D转换函数 调 用:? = Read (); 参 数:无 返回值:8位的ADC数据 结 果:读出指定ADC接口的A/D转换值,并返回数值 备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件) *******************************************************************/ uchar Read (uchar CHA){ uchar AD_FIN=0;//存储A/D转换标志 /******以下为ADC初始化程序****************************/ CHA &= 0x07;//选择ADC的8个接口中的1个(0000 0111 清0高5位) ADC_CONTR = 0x40;//ADC转换的速度设定 _nop_(); ADC_CONTR |= CHA; //选择A/D当前通道 _nop_(); ADC_CONTR |= 0x80; //启动A/D电源 DELAY_MS(1); //使输入电压达到稳定(1ms即可?/******以下为ADC执行程序****************************/ ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1) _nop_(); _nop_(); _nop_(); _nop_(); while (AD_FIN ==0){ //等待A/D转换结束 AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否 } ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换, return (ADC_DATA); //返回A/D转换结果(8位) }/**********PWM初始化函数****************************************/ void PWM_init (void){ CMOD=0x02; //PCA工作模式设定 CL=0x00;//PCA计数器低8位置0 CH=0x00;//PCA计数器高8位置0 CCAPM1=0x42; //设置为脉宽调节PWM方式(0100 0010) CCAP1L=0x00; //CCAP1L复位 CCAP1H=0x00; //CCAP1H复位 CR=1; //启动PCA定时器 } /**********PWM1占空比赋值函数***********************************/ void PWM1_set (uchar a){//输出为可调方波 CCAP1L=a; //CCAP1L赋值 CCAP1H=a; //CCAP1H赋值 } /**************************************************************** 函数名:主函数 调 用:无 参 数:无 返回值:无 结 果:程序开始处,无限循环 备 注: ****************************************************************/ void main (void) { PWM_init (); P1M0 = 0x03; //P1.0/P1.1:0000 0011(高阻) P1M1 = 0x00; //P1.0/P1.1:0000 0000 ON=1; while(1){ if(ON==0)//STC软件下载提示信号检测 {ISP_CONTR=0x60;}//从STC的ISP区开始运行程序的软件复位设置 else { M=Read(0);//P1.0口模拟量转换 PWM1_set(M);//转换结果为PWM赋值 } } }结果与结论:经实验,调整KW,电机由停止到最高转速可以平滑过渡,若将电机换成LED则可均匀调光。用于电机调速时,由于电机的最小启动电压的限制,5V系统中只能在1.8V/4.8V之间调节,由此看来,实际应用时,务必要选择具有减速机构的直流电机才有价值,另外,此实验只是在电机无负荷状态下进行的演示,实际应用时,有必要加入速度反馈系统,进行闭环控制,才能得到真实结果,至于反馈信号的获得,有磁电式、光电式、霍尔元件等等方法很多,在此就不细究了,至此,这片STC芯片的主要功能应用实验就告1段落了。程序发现问题,欢迎切磋。如若实验,粘贴/编译即可,若实际应用还应全面考量,如涉及实际应用系统设计及问题,恕本人爱莫能助。



5、吊车stc100是什么意思?

QTZ100(TC6013)塔吊使用说明书 QTZ100(TC6013)塔式起重机(以下简称起重机)是济南建工机械有限公司根据国家标准,开发研制的新型建筑用起重机。该机为水平臂架,小车变幅,上回转自升式多用途起重机。其标准臂长为50米,加长臂长可达55米、60米,最大起重量为8吨,额定起重力矩为960千牛.米,最大起重力矩为1000千牛.米。该机主要特点如下: 爬升架主要由套架、平台、液压顶升装置及标准节引进装置等组成。套架是套在塔身标准节外部,上端用螺栓与下支座相连,高6.93米,截面2.3米×2.3米,是由型钢和钢板组焊成的框架结构。为了便于顶升安装的安全需要,特设有工作平台。爬升架内侧沿塔身主弦杆安装有16个可调节的滚轮,支撑在塔身主弦杆的外侧。在爬升架的横梁上,焊上两块耳板与液压系统油缸铰接承受油缸的顶升载荷。爬升架下部有两个杠杆原理操纵的摆动爬爪,在液压油缸回收活塞以及引进标准节的过程中作为爬升架承托上部结构重量之用。 起重臂上、下弦杆都是用两个角钢拼焊成的方管,整个臂架为3角形截面,高1.2米,宽1.4米,总长为63.20米,共分为十节,节与节之间用销轴连接,拆装方便。为了提高起重性能,减轻吊臂重量,吊臂采用双吊点、变截面空间桁架结构。在起重臂第1节放置小车牵引机构和悬挂吊蓝,便于安装和维修。臂架根部第1节与回转塔身用销轴连接。



6、怎么设置STC12C2052AD的IO口怎么设置状态呢,比如输入和输出。

#include #include #define uchar unsigned char #define uint unsigned int #define AD_SPEED 0x60 //0110,0000 1 1 270个时钟周期转换1次, /************江苏淮安欢迎您!&&&&布衣欢迎您!******************************/ /***************qq:42814761******壮丽江南,魅力楚州***************************/ // sbit M=P1^5; //过压指示灯 sbit N=P1^3; //欠压指示灯 sbit LED=P1^7; //工作正常灯 sbit CONTRL=P3^4; //输出控制端 sbit PWM=P3^7; /****************************************************************/ void pwm(); void delayms(uint); uint ADC(); void InitADC(); void baohu(); float voltage=0.0; uint V; float VCC=5.05; uchar mtab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***8**************************************************************/ void main() { CONTRL=0;//先关闭输出 delayms(700); V=40; //这些是我差错的时候添上去的。目的在于弄明白到底AD转换了没有。 voltage=4.0;//实践证明,更换数值没用,说明没AD LED=0; CONTRL=1; voltage=V*VCC/256.00*5.00; delayms(1000); PWM=1; CONTRL=1;//继电器工作,是保护状态 delayms(1000); M=0; N=0; LED=0; delayms(2000); M=1; N=1; LED=1; pwm();//产生PWM波形 delayms(7000); delayms(100);//延时 InitADC(); delayms(20); V= ADC(); baohu(); while(1) { V= ADC(); baohu(); delayms(300); } } // // void pwm() { //PCA模块工作于PWM模式 C程序 CMOD = 0x04; //用定时器0溢出做PCA脉冲 CL = 0x00; //PCA定时器低8位 地址:E9H CH = 0x00; //PCA高8位 地址 F9H CCON=0x00; CCAP0L = 0x60; //PWM模式时他俩用来控制占空比 CCAP0H = 0x60; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出) CCAPM0 = 0x42; //0100,0010 Setup PCA module 0 in PWM mode // ECOM0=1使能比较 PWM0=1 使能CEX0脚用作脉宽调节输出 /********************* PCA 模块工作模式设置 (CCAPMn 寄存器 n= 0-34种) 7 6 5 4 3 2 1 0 - ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn 选项: 0x00 无此操作 0x20 16位捕捉模式,由 CEXn上升沿触发 0x10 16位捕捉模式,由CEXn下降沿触发 0x30 16位捕捉模式,由CEXn的跳变触发 0x48 16位软件定时器 0x4c 16位高速输出 0x42 8位PWM输出 每个PCA模块另外还对应两个寄存器:CCAPnH和CCAPnL 。 捕获或者比较时,它们用来 保存16位计数值,当工作于PWM模式时,用来控制占空比 *******************************/ TMOD=0x02; TH0=0x06; TL0=0x06; CR=1; //Start PCA Timer. TR0=1; } //AD转换初始化 ----打开ADC电源 void InitADC() { P1=0xff; ADC_CONTR|=0x80; delayms(80); //这两个寄存器用来设置 P1口4种状态,每1位对应1个P1引脚 ,按状态组合操作 /***************** P1M0 和P1M1 寄存器位 7 6 5 4 3 2 1 0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 同理P3M0 P3M0 也是。因为STC12C2052AD只有两个P口,所以只有这俩组 STC12C5410AD还多P2M0 P1M0 有3组 P1M0 P1M1 高 0 0 普通I0口 (准双向) P1寄存器位 7 6 5 4 3 2 1 0 0 1 强推挽输出 (20MA电流 )尽量少用 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1 0 仅做输入 A/D转换时可用此模式 1 1 开漏 ,A/D转换时可用此模式 例如: 要设置P1.2为 AD 输入口 则 P1M0=0X02 ; P1M1=0X02; 开漏即可 当不用AD时,最好 关闭ADC电源 ,恢复为IO口状态 ********************************/ P1M0=0x02;//这两个寄存器用来设置 P1口4种状态,每1位对应1个P1引脚 ,按状态组合操作 P1M1=0x02;//设置P1.1为开漏状态 } // AD转换程序 /****************************************************** 注意:这个函数里注释的命令是通用命令,可以针对所有AD通道使用,我这就认准了P1.11个通道,所以直接 //赋值,省点"流量"!折磨我的问题就出在这个函数里的while等待语句 while (1) //等待A/D转换结束 { if (ADC_CONTR & 0x10) //0001,0000 测试A/D转换结束否 { break; } }。