本文目录一览

1,单片机编程

1MOV A,R3ADD A,R7DA AMOV R5,AMOV A,R2ADDC A,R6DA AMOV R4,AMOV A,#00HADDC A,#00HMOV R0,A2MOV A,R3DA AMOV R5,AMOV A,#00HADDC A,#00HMOV R4,A

单片机编程

2,单片机产生正弦波的程序

DB是个伪指令,功能:从指定的地址单元开始,定义若干个8位的内存单元的内容。如你给出的例子,若指定地址为2000H,用DB连续定义了8个单元的内容,(2000H)=80H~(2007H)=96H,用查表法写程序,会通过指针@A+PC来读取列表的内容。如果你需要转换的数有6个,出来的结果当然有六个。
数不是算出来的,是正弦采样点,一共有256个点。通过DA转换输出信号的。用示波器看,就是正弦信号,其实是一种曲线阶梯型的信号而已。一行6个,只是一种写法,你可以写成10个,8个,随便你,但是总数不要变就行。有空你可以看看《信号转换技术》
单片机 外接ad转换芯片 再加运放 通过一定的控制程序就可产生正弦波。实现方法: 1、通过单片机da来实现,需要通过查表法; 2、通过pwm方式实现; 不过都需要加硬件滤波电路来实现正弦波的平滑。
为什么说一行六个呀?
最简单的拿个excel,利用函数就可以算出来。再转成你要的16进制。

单片机产生正弦波的程序

3,单片机定时程序的编写

COUNT EQU 5;定时200us*5=1ms ;********************************* ORG 0000H LJMP MAIN ORG 000BH LJMP _T0 MAIN: MOV SP,#50H MOV TH0,#38H MOV TL0,#38H MOV TMOD,#00000010B SETB TR0 SETB EA SETB ET0 LOOP: MOV P1,#0FFH ;输出1 LOOP1: MOV A,R2 CJNE A,#0,LOOP1 ;判断到1ms否 MOV P1,#0FEH ;到1ms输出0,否则继续检测 MOV R2,#COUNT ;重置计数 LOOP2: MOV A,R2 CJNE A,#0,LOOP2 ;判断到1ms否 MOV R2,#COUNT SJMP LOOP ;到1ms循环 ;********************************** _T0: DEC R2 RETI END ;KEIL2调试通过

单片机定时程序的编写

4,单片机的程序怎么编写

#include //调出头文件,必须写 unsigned cont=0; //初始化程序void main(void) //主程序{ WDTCTL = WDT_ADLY_250; //基本时钟驱动看门狗定时器(WDT)250ms中断 IE1 |= WDTIE; //使能 WDT 中断 FLL_CTL0 |= XCAP14PF; // 设置时钟电容 P1DIR |= 0xe0; // 设置P1.5, P1.6,P1.7为输出端口 _EINT(); // 使能单片机中断,初始化结束 for (;;) //主循环程序 { _BIS_SR(LPM3_bits); // 进入低功耗模式3(LPM3) _NOP(); // 空操作,为开发软件设断点用 }} interrupt[WDT_VECTOR] void watchdog_timer(void) //WDT中断入口{cont=cont+1; if(cont==20) {P1DIR=0x80;} if(cont==40) {P1DIR=0x40;} if(cont==60) {P1DIR=0x20;} if(cont==61) {cont=1;} _NOP(); // 空操作,为开发软件设断点用}
一步一步来先搞懂程序的意思就好办勒
用WAVE或keil写。单片机的资料网上大把,可以参考一下,很容易的。
你可以先把0放到一个单元里面,比如说100h,然后mov r0,100hinc 100hmov r1,100hinc 100h继续写下去就可以了。

5,单片机的红绿灯控制程序如何写啊

//--------------------------------------------------//名称:LED模拟交通灯//作者:彭伟《单片机C语言程序设计实训100例-基于8051+PROTEUS仿真》//--------------------------------------------------//说明:东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯// 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁// 闪烁5次后亮红灯,东西向绿灯亮,如此重复//---------------------------------------------------#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_A=P0^0;//东西向指示灯sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3;//南北向指示灯sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_count=0;Operation_type=1;//闪烁次数及操作类型变量//-----------------------------------------------------//延时//----------------------------------------------------void DelayMS(uint x) uchar i; while(x--)for(i=0;i<120;i++)}//---------------------------------------------------//交通灯切换子程序//---------------------------------------------------void Traffic_light() switch(Operation_type) case 1://东西向绿灯南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0; RED_B=0;YELLOW_B=1;GREEN_B=1; DelayMS(2000); Operation_type=2; break; case 2://东西向黄灯闪烁,绿灯关闭 DelayMS(300); GREEN_A=1; YELLOW_A=~YELLOW_A; //闪烁5次 if (++Flash_count!=10) return; Flash_count=0; Operation_type=3; break; case 3://南北向绿灯东西向红灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); Operation_type=4; break; case 4://南北向黄灯闪烁,绿灯关闭 DelayMS(300); GREEN_B=1; YELLOW_B=~YELLOW_B; //闪烁5次 if (++Flash_count!=10) return; Flash_count=0; Operation_type=1; }}void main() while(1) Traffic_light();}
#include #define uchar unsigned char #define red 2500 //红灯时间25s #define yel 500 //黄灯 #define gre 1000 //绿灯 sbit red=p^0; sbit yel=p^1; sbit gre=p^2; uchar count=0; uchar flag=0; void timer0() interrupt 1 using 1 //10ms中断~晶振为11.0592mhz { th0=0xdb; tl0=0xff; count++; } void main() { tmod=0x01; th0=0xdb; tl0=0xff; ea=1; et0=1; tr0=1; red=1; yel=0; gre=0; while(1) { switch(flag) { case 0:if(count==red) {red=0;flag++;}//到25s灭红灯~ else red=1;break;//否则点亮红灯~下同~ case 1:if(count==yel) {yel=0;flag++;} else yel=1;break; case 2:if(count==gre) {gre=0;flag=0;} else gre=1; } } }

6,单片机串口通信步进电机控制程序流程

一楼的说的有道理啊,还是得靠自己的给你个类似的你参考一下吧!我也不会的实验实现的功能主要是:用PC上的一个软件通过串口通讯控制单片机I/O口的输出。本次实验主要涉及PC端上位机的程序编写(用VC)与单片机程序的编写(用Keil)。为了简化实验,PC端软件设计成具有8个按钮的对话框,每个按钮分别控制单片机P2口的一个引脚的高低电平。为了体现直观的结果,P2口上接上8个发光二极管。 PC与单片机的通讯协议如下:采用4800波特率,无校验位,8个数据位,1个停止位,一次传输一个控制字节。一、上位机软件的编写 本来控制单片机只需单向传输数据即可,为了熟悉PC端接受数据的功能,在应用软件将控制数据传输到单片机端后,单片机端回传数据给应用软件,并用16进制格式显示在编辑控件中。 VC实现对串口的控制主要有两种方式:mscomm控件与api函数。由于mscomm控件实现简单,本实验采用该方式。1. 在VC中创建一个基于对话框的应用程序,在该程序中插入Mscomm控件。修改对话框资源,增加Mscomm及8个按钮控件与一个编辑框。并为Mscomm控件增加一个控件变量m-com。2. 在对话框的OnInitDialog()函数中初始化串口,代码如下:if(m_com.GetPortOpen()) m_com.SetPortOpen(FALSE);m_com.SetCommPort(1);//选择com1if(!m_com.GetPortOpen()) m_com.SetPortOpen(TRUE);//打开串口else MessageBox("无法打开串口!");m_com.SetSettings("4800,n,8,1");//波特率4800,无校验,8个数据位,1个停止位m_com.SetInputMode(1); //1:表示以二进制方式检取数据m_com.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于 //或等于1个字符时将引发一个接收数据的OnComm事件m_com.SetInputLen(0); //设置当前接收区数据长度为0m_com.GetInput();//先预读缓冲区以清除残留数据3.为每个按钮添加命令函数。下面为其中一个函数的代码,其他与此类似。void CComDlg::OnP20() // TODO: Add your control notification handler code hereOutput.Format("%c",0x01);m_com.SetOutput(COleVariant(Output));}4.接受数据时采用Mscomm控件的响应函数进行对事件的捕捉。处理代码如下:void CComDlg::OnComm() // TODO: Add your control notification handler code hereVARIANT Input;CString temp;long k,len;COleSafeArray OleArray;BYTE rxdata[10];if (2==m_com.GetCommEvent()) Input=m_com.GetInput(); OleArray=Input; len=OleArray.GetOneDimSize(); for (k=0;k<len;k++) OleArray.GetElement(&k,rxdata+k); BYTE bt=*(char *)(rxdata+k); temp.Format("%02X ",bt); m_recv+=temp; } }UpdateData(FALSE);}二、单片机程序的编写。单片机程序编写相对容易,只需进行初始话串口,接受数据,发送数据等工作即可。代码如下:#i nclude <reg51.h>unsigned char inbuf;unsigned char flag;//初始化函数void init_serialcomm(void) SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr,0101000b TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload,0010000b PCON |= 0x80; //SMOD=1;10000000b TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz IE |= 0x90; //Enable Serial Interrupt TR1 = 1; // timer 1 run inbuf=0; P2=0; // TI=1; }//向串口发送一个字符 void send_char_com(unsigned char ch) SBUF=ch; while(TI==0); TI=0;}//串口接收中断函数void serial () interrupt 4 using 3 if(RI) RI = 0; inbuf=SBUF; } flag=1;}main() init_serialcomm(); //初始化串口 while(1) if(flag) P2=inbuf; send_char_com(inbuf); flag=0; } }}
网上能找到的我估计人家还是能COPY给你的,呵呵
假设p0口低4位接步进电机正转p0=8delayms(1)p0= 4 delayms(1)p0=2delayms(1)p0= 1delayms(1)反转的话输出 1 2 4 8即可
我相信,你的这几个问题在这里没人能帮你解决!原因是问题不够简单,不直接,想帮你的人不能直接在这里给你马上做出回答。还有一个学习是要自己摸索的,不能够全部要别人来代劳,若碰到有不懂的点,可以在这里提问,相信很多人会为你解答,但像要别人写流程,写代码之类的,是不可能了!

文章TAG:单片机  程序  编程  单片机程序  
没有了