导航:首页 > 操作系统 > 61单片机编程指南

61单片机编程指南

发布时间:2022-05-27 10:52:29

单片机如何编程

建议你看一下单片机编程入门书籍来看,前提是要学会c语言。。

② 单片机怎么编程

1、下个keil3软件,新建工程之后,新建文件,写文件名的时候,写.asm后缀的就是写汇编语言,写.c后缀的就是写C语言。
2、至于怎么编程,单片机编程,重点就是掌握单片机有哪些I/o口,哪些寄存器,哪些特殊寄存器。
3、推荐看一下视频《十天学会单片机》,搜一下都有的,对初学者非常有帮助。
4、另外补充一点,学单片机,光看书一年都学不会,边看边学,一个月就能入门了,所以最好弄一块板子,在上面跑跑程序。

③ 单片机编程[悬赏]

给你个参考:
这是一个采集方向数据,然后保存到单片机的flash中的程序,用的是msp430f135单片机,方向采集模块用的是串口电子指南针,都是本人亲手写的,调试后没问题:如有疑问,联系本人。[email protected]

/*采用p3口输入 p2.0中断 中断一次采集一次同时写入一次*/

#include <msp430x13x.h>
/*#define xie 10 0xea00 //5kb
#define xie 9 0xec00
#define xie 8 0xee00
#define xie 7 0xf000
#define xie 6 0xf200
#define xie 5 0xf400
#define xie 4 0xf600
#define xie 3 0xf800
#define xie 2 0xfa00 */
#define xie1 0xfc00
char a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
char caiji[2],b=0;
int ifg;
void xie( );
void delay(int v) //延时子程序
{ while(v!=0)v--;}
void display(void) //显示
{char x1,x2,x3;
x1=(caiji[1]/1+256*caiji[0])/100;
x2=((caiji[1]/1+256*caiji[0])%100)/10;
x3=(caiji[1]/1+256*caiji[0])%10;
P5OUT=a[x1];P4OUT=a[x2];P2OUT=a[x3];
}

void main(void)
{
WDTCTL= WDTPW + WDTHOLD;//关闭看门狗

BCSCTL1&=0X7F;
BCSCTL2|=0X88;//8M直通

int j;
P1DIR=0x00; // P1口为输入
P2DIR=0xff; // P2 口为输入
P4DIR=0XFF;
P5DIR=0XFF;

P3SEL|=0X30;
P3DIR|=0X10;

UCTL0|=SWRST;//这之后才能对串口模块其它寄存器做修改
UCTL0=CHAR;//
UTCTL0=SSEL0+SSEL1;//时钟源为ACLK(只能来自低速晶体)32768

UBR00=65;
UBR10=3;
UMCTL0=0X54;//波特率为9600

UCTL0&=~SWRST;//这之后发送模块才能工作

ME1|=0x80+0x40;//允许串口模块工作
IE1|=URXIE0+UTXIE0;//允许发送和接收中断

IFG1=0X02;//使UTXIFG0复位
_EINT(); //使能中断,这是一个C编译器支持的内部过程。

while(1)
{
if(P1IN==0XFE)
{delay(6000);
if(P1IN==0XFE) //p1.0长按 写模式
{P4OUT=0XF9;
for(j=1;j<2/*11*/;j++)
{
xie(j);
FCTL1=FWKEY; FCTL3=FWKEY+LOCK;//写完锁定
}
P4OUT=0x00;
}
}

if(P1IN==0XFD)
{delay(6000);
if(P1IN==0XFD) //p1.1长按 发送模式
{P5OUT=0XF9;
int seg,t;

for(seg=1;seg<2/*11*/;seg++)
{
char *fasong=(char *)xie1-0x0200*(seg-1);
for(t=0;t<512;t++)
{
TXBUF0=*(fasong+t);
delay(300);
}
}
}}}}

void xie(int an) //写某一段
{ int i;
char *xie_an=(char *)xie1-0x0200*(an-1);
FCTL1=+FWKEY+ERASE;//擦除一段
FCTL3=FWKEY;//解锁
*xie_an=0;//空写 启动擦除
FCTL1=FWKEY+WRT;//开始写入数据
for(i=0;i<257;i++)
{ if (P1IN==0xFB|P1IN==0xbf)
{delay(6553);
if (P1IN==0xFB|P1IN==0xbf) //p1.2长按 向模块发送91
{P2OUT=0xf9;TXBUF0=0x91;delay(65500);ifg=1;}
}
if(ifg==1)
{
*xie_an++=caiji[0];
*xie_an++=caiji[1];
ifg=0;display();
}
else
i=i-1;
}
}

#pragma vector=USART0TX_VECTOR //发送中断
__interrupt void usart0_tx (void)
{;}

#pragma vector=USART0RX_VECTOR //接收中断
__interrupt void UART0RX0_rx (void)
{
caiji[b]=RXBUF0;delay(300);b=b+1;
if(b==2)b=0;
}

④ 单片机编程学习步骤。

学习单片机入手的时候最好不从C开始,那样的话对单片机硬件资源的理解会受到限制和影响,还是先学汇编较好。推荐两本书《MCS-51/96系列单片机原理及应用》《51单片机C语言完全手册》先看前一本,再学后一本。
至于C跟普通C差不多,只是为了包含单片机的硬件定义、资源,比如51单片机需要加头文件:
include<reg51.h>,其他需要用到什么函数加相应的头文件就可以了,一般的应用只有这个头文件就行。通讯一般用串口,有专门的串口寄存器和中断比如:
初始化:
initser()
{
SCON=0x50;
TMOD=0x20;
TH1=TL1=0xfd;
TR1=1;
EA=1;
}
收发数据中断:
serint() interrupt 4
{
if(RI)//收
{
RI=0;
dat=SBUF;
}
if(TI) //发
{
Ti=0;
}
}

⑤ C51单片机入门编程问题

1、你不要想它怎么关联的,它就是一种固定的写法,语法就这样。你只能这样写,也当你写成这样的时候,编译器会认得出来它代表什么的,写成其它的话,编译就会报错了。所以不要再纠结这个问题。语法这样定的,遵守就行了。
2、0xfe不是什么地址,就是个简单的赋值,OutData就是等于0xfe。
OutData要是指一个端口的话,最前面是要有宏定义的,比如

#define OutData P0
上面表示用OutData这个词代替P0。
为什么要么定义,而不直接用P0就好了,你去查一下宏定义的好处就知道为什么会有这种用法了~

⑥ 单片机C语言编程

KEY4EQU30H

KEY2EQU31H

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

CLREA

MOVSP,#5FH

MOVKEY2,#0

MOVKEY4,#0

LOOP:

JBP1.0,LOOP

MOVR7,#10

LCALLDELAY

JBP1.0,LOOP

JNBP1.0,$

MOVP3,#0C0H

LOOP0:

LCALLKEYDEAL

MOVA,KEY4

JNZLOOP41

MOVA,P3

ANLA,#0F0H

ORLA,#0EH

MOVP3,A

SJMPLOOP21

LOOP41:

DECA

JNZLOOP42

MOVA,P3

ANLA,#0F0H

ORLA,#0DH

MOVP3,A

SJMPLOOP21

LOOP42:

DECA

JNZLOOP43

MOVA,P3

ANLA,#0F0H

ORLA,#0BH

MOVP3,A

SJMPLOOP21

LOOP43:

DECA

JNZLOOP21

MOVA,P3

ANLA,#0F0H

ORLA,#07H

MOVP3,A

LOOP21:

MOVA,KEY2

JNZLOOP22

MOVA,P3

ANLA,#0FH

ORLA,#20H

MOVP3,A

SJMPLOOP3

LOOP22:

DECA

JNZLOOP3

MOVA,P3

ANLA,#0FH

ORLA,#10H

MOVP3,A

LOOP3:

LJMPLOOP0

;----------------------------

DELAY:

MOVR2,#2

DLY1:

MOVR3,#250

DJNZR3,$

DJNZR2,DLY1

DJNZR7,DELAY

RET

;-----------------------------

KEYDEAL:

JBP1.1,KEYEN1

MOVR7,#10

LCALLDELAY

JBP1.1,KEYEN1

JNBP1.1,$

INCKEY4

MOVA,KEY4

ANLA,#03H

MOVKEY4,A

KEYEN1:

JBP1.2,KEYEN2

MOVR7,#10

LCALLDELAY

JBP1.2,KEYEN2

JNBP1.2,$

INCKEY2

MOVA,KEY2

ANLA,#01H

MOVKEY2,A

KEYEN2:

RET

;-----------------------------

⑦ 单片机编程

;
ORG 0000H
MOV TMOD, #01H ;T0方式1定时.
SETB TR0 ;启动T0
LOOP:
MOV TH0, #(65536-5000/2/2) / 256 ;送入初始值.
MOV TL0, #(65536-5000/2/2) MOD 256 ;定时2500us@6MHz
JNB TF0, $ ;等待定时完成.
CLR TF0 ;清除标志.
CPL P1.7 ;输出方波.
SJMP LOOP ;无限循环.
END ;完.

⑧ 帮忙解释一下单片机编程中的 每一个指令的意思和控制过程、急用、谢谢

mov tmod, #61h;将61h这个数赋给tmod寄存器,具体什么模式你把它拆成16进制数对着寄存器看吧,好吧,刚帮你查了下,是:仅由TR0,TR1置位分别启动定时器T0、T1,T0为计数功能,T1为定时功能。T1是自动重装8位计数器,T0是16位计数器。
mov dptr, #15536 ;令dptr(记得是数据指针)的值为15536
mov tl0,dpl ;让dptr的低8位的值给定时器t0的低8位
mov th0, dph ;把dptr的高8位的值给定时器t0的高8位
mov tl1, #236 ;让t1的值为236
setb tr0;开启t0
setb tr1;开启t1
loop: jnb tf0,$; 表示测试tf0的值,如果不为1(为0)则程序继续执行本条指令($表示当前位置),如果为1则顺序执行下一条指令。 这里就是说当定时器T0溢出时进入下面的指令
clr tf0 ;清零tf0并进入下面的程序
mov dptr, #15536 ;与上面的意思一样
mov tl0, dpl
mov th0, dph
clr p3.5 ;使3.5口为0
setb p3.5 ;使3.5口为1

jnb tf1 ,loop ;还是检测,这次检测tf1位的值,如果不为1则继续本指令
clr tf1;令tf1为0,即低电平
大概就记得这些了 给你个参考吧

⑨ 单片机编程的整个流程

首先,你需要单片机吧,其次需要下载器,下载线,单片机仿真芯片等,如果你还要自己做电路,那么还要一套电子工具,什么电烙铁,剪线钳,镊子,吸锡器什么的.

我拿51系列单片机来举例.

(1)首先你要做的是,规划好你要做什么,对设计的各个方面做一个粗略的规划.如,编程要实现什么,需不需要自己做电路....

(2)把电路图画好,对照电路图做电路,如果自己做电路的话,你需要去电子城购买电子元器件,然后对照电路图把硬件电路做好.检查电路有没有问题,如是否短路,虚焊什么的...

(3)步骤2是针对较简单的单片机最小系统,如果你做的电路有点复杂,最好做一块PCB板,这时你就需要用电路编辑工具如DXP,等PCB文件发给生产PCB板的厂家加工,这个过程也不长,如果你经验积累得很多的话.但要设计一块好的PCB板,还有电路图设计,这都是有很深的学问的.冰冻三尺,非一日之寒...

(4)通过步骤2,3你的硬件已有了,现在可以编程,编程也是分几个阶段的,但主要阶段是:设计算法-->绘制流程图-->编写代码-->编译-->下载-->运行或调试-->程序的优化.

其中,算法设计的优劣很重要,它是决定你的设计的质量如何的一方面.绘制流程图这个环节被很多人忽略,对于一些小程序,不需要绘制流程图,但对于一个很大的程序,你没有一个体系的思想,是很难写下去的.但不否认,有这样的高手,但我觉得要从一开始养成良好的习惯,简单的画画流程图是有好处的.日积月累,它会提高你编程的效率.接下来,编写代码,可以用KEIL软件,其它还有什么ASM什么的.我知道的最多的都是用的KEIL.代码编写好后,编译生成HEX,BIN文件,这两种类型的文件都是可以下载到单片机的ROM中的.

(5)下载到单片机后,就开始运行了,或用仿真芯片进行在线调试,有问题就改,直到没有问题为止.成功后,还需要反思一下,自己的设计还有没有需要改进的地方.如程序需不需要优化,电路需不需要优化,换种算法行不行....

(注:你问题中说要”做成一个芯片”,这一点我不知道.我没做过.向ATMEL,SST,周立功等的工程师打听打听说不定会有更大的收获.)

⑩ 单片机(编程)

1)将外部RAM 2000H-2010H 中大于127的单元的内容增1。
共17个字节.
MOV DPTR, #2000H
MOV R2, #17
DDDD:
MOVX A, @DPTR
JNB ACC.7, NEXT ;大于等于128转移.
ADD A, #1
MOVX @DPTR, A
NEXT:
INC DPTR
DJNZ R2, DDDD
SJMP $

2)将外部RAM 3000H-3010中非0单元的数据减1。
共17个字节.
MOV DPTR, #3000H
MOV R2, #17
DDDD:
MOVX A, @DPTR
JZ NEXT ;为0转移.
CLR C
SUBB A, #1
MOVX @DPTR, A
NEXT:
INC DPTR
DJNZ R2, DDDD
SJMP $

3)比较寄存器R3、R4中两无符号数的大小,将较小者存入R5。
.
MOV A, R3
CLR C
SUBB A, R4
JNC R4_XIAO
MOV A, R3
MOV R5, A
SJMP EEE
R4_XIAO:
MOV A, R4
MOV R5, A
EEE:
SJMP $

阅读全文

与61单片机编程指南相关的资料

热点内容
两个数字的加减乘除运算编程 浏览:225
给手机加密码忘记了怎么办 浏览:598
单片机运算符 浏览:297
移动端微信商城源码 浏览:442
编程猫下一个背景在哪里 浏览:358
javaclasstype 浏览:238
乐高编程和乐高课的延伸 浏览:355
苹果手机怎么切换app美国账号 浏览:865
编译程序输入一个字符串 浏览:407
圆命令画法 浏览:308
如果给电脑e盘文件加密 浏览:802
javaswing项目 浏览:778
androidsdksetup 浏览:1005
pdf怎么设置中文 浏览:128
安卓手机用什么软件看伦敦金 浏览:966
魅族文件夹无名称 浏览:792
苏黎世无人机算法 浏览:876
核桃编程和小码王的融资 浏览:686
微积分教材pdf 浏览:728
写python给微信好友发消息 浏览:340