文档库 最新最全的文档下载
当前位置:文档库 › 飞思卡尔汇编指令集

飞思卡尔汇编指令集

飞思卡尔汇编指令集
飞思卡尔汇编指令集

飞思卡尔芯片汇编指令集

目录

汇编指令 (5)

LDAA (5)

LDAB (5)

LDD (5)

LDS (5)

LDX (5)

LDY (5)

LEAS (6)

LEAX (6)

LEAY (6)

STAA (6)

STAB (6)

STD (6)

STS (6)

STX (6)

STY (7)

TAB (7)

TAP (7)

TBA (7)

TFR (7)

TPA (7)

TSX (7)

TSY (7)

TXS (8)

TYS (8)

EXG (8)

XGDX (8)

XGDY (8)

SEX (8)

MOVB (8)

MOVW (8)

ABA (9)

ABX (9)

ABY (9)

ADDA (9)

ADDB (9)

ADDD (9)

ADCA (9)

ADCB (10)

SUBA (10)

SUBB (10)

SUBD (10)

SBCA (10)

SBCB (11)

DAA (11)

INC (11)

INCA (11)

INCB (11)

INS (11)

INX (11)

INY (12)

DEC (12)

DECA (12)

DECB (12)

DES (12)

DEX (12)

DEY (12)

CBA (12)

CMPA (13)

CMPB (13)

CPD (13)

CPS (13)

CPX (13)

CPY (13)

TST (13)

TSTA (14)

TSTB (14)

ANDA (14)

ANDB (14)

ANDCC (14)

EORA (14)

EORB (14)

ORAA (14)

ORAB (15)

ORCC (15)

CLC (15)

CLI (15)

CLV (15)

CLR (15)

CLRA (15)

CLRB (15)

COM (16)

COMB (16)

NEG (16)

NEGA (16)

NEGB (16)

EMUL (16)

EMULS (16)

MUL (17)

EDIV (17)

EDIVS (17)

FDIV (17)

IDIV (17)

IDIVS (18)

EMACS (18)

BITA (19)

BITB (19)

BLCR (19)

BSET (19)

LSL, LSLA, LSLB, LSLD (19)

LSR, LSRA, LSRB, LSRD (19)

ASL, ASLA, ASLB, ASLD (20)

ASR, ASRA, ASRB (20)

ROL, ROLA, ROLB (20)

ROR, RORA, RORB (20)

MEM (21)

REV, REVW (21)

WA V (21)

MAXA (21)

MINA (21)

MAXM (21)

MINM (21)

EMAXD (22)

EMIND (22)

EMAXM (22)

EMINM (22)

TBL, ETBL (22)

BRA, LBRA (22)

BRN, LBRN (22)

BCC, LBCC (22)

BCS, LBCS (22)

BEQ, LBEQ (23)

BNE, LBNE (23)

BMI, LBMI (23)

BPL, LBPL (23)

BVS, LBVS (23)

BHI, LBHI (23)

BHS, LBHS (23)

BLO, LBLO (23)

BLS, LBLS (24)

BGT, LBGT (24)

BGE, LBGE (24)

BLT, LBLT (24)

BLE, LBLE (24)

DBEQ (24)

DBNE (24)

IBEQ (25)

IBNE (25)

TBEQ (25)

TBNE (25)

JMP (25)

BSR, JSR, RTS (25)

CALL, RTC (25)

SWI (26)

TRAP (26)

RTI (26)

PSHA, PSHB, PSHC, PSHD, PSHX, PSHY (26)

PULA, PULB, PULC, PULD, PULX, PUL Y (26)

STOP (26)

WAI (26)

BGND (26)

NOP (27)

汇编伪指令 (27)

ORG (27)

EQU (27)

SET (27)

DC (27)

FCC (27)

DCB (28)

DS (28)

ABSENTRY (28)

XDEF (28)

XREF (28)

END (28)

SECTION (28)

MARCO, ENDM (29)

CPU内部寄存器A(1byte), B(1byte), X(2byte), Y(2byte), D(2byte)

CCR:条件码寄存器

S –停止运行模式禁止位

X –非屏蔽中断允许位

H –半进位标志

I –中断标志位

N –负标志

Z –0标志

V –溢出标志

C -- 进位/借位标志

汇编指令

LDAA

说明:将内存单元的内容加载到累加器A;

例:LDAA $55 ;表示将内存单元$0055的数据加载到累加器A中。

LDAB

说明:将内存单元的内容加载到累加器B;

例:LDAB 5 , Y ;表示将Y+5内存单元的数据加载到累加器B中。

LDD

说明:将内存单元的内容加载到累加器D中;

例:LDD D , X ;表示将D+X内存单元的数据加载到累加器D中。

LDS

说明:将内存单元的内容加载到堆栈指针寄存器SP中;

例:LDS X ;表示将X指向的内存单元的内容加载到堆栈寄存器SP中。

LDX

说明:将内存单元的内容加载到变址寄存器X中;

例:LDX #$2000 ;表示将立即数$2000加载到变址寄存器X中。

LDY

说明:将内存单元的内容加载到变址寄存器Y中;

例:LDX #$3000 ;表示将立即数$3000加载到变址寄存器Y中。

LEAS

说明:将有效地址加载到堆栈指针寄存器SP中;

例:LDY #$2000 ;表示将立即数$3000加载到变址寄存器Y中。

LEAS 4,Y+ ; SP的值为$2000,然后Y的值加4,Y为$2004。

LEAX

说明:将有效地址加载到变址寄存器X中;

例:LEAX D,Y ; 将D的内容加上Y的内容加载到X寄存器。

LEAY

说明:将有效地址加载到变址寄存器Y中;

例:LEAX B,X ; 将B的内容加上X的内容加载到Y寄存器。

STAA

说明:将累加器A的内容存储到内存单元中;

例:STAA $1000 ; 将累加器A的内容存储到地址为$1000的内存单元中。

STAB

说明:将累加器B的内容存储到内存单元中;

例:LDX #$1000

STAB 2, X+ ; 将B的内容存储到地址为$1000的X内存单元中,然后X加2 。

STD

说明:将累加器D的内容存储到内存单元中;

例:STD $2000 ; 将D的内容存储到地址为$2000的内存单元中。

; A送$2000单元, B送$2001单元

STS

说明:将堆栈指针SP的内容存储到内存单元中;

例:STS $1000 ; 将堆栈指针SP的内容保存到地址为$1000,$1001单元中。

STX

说明:将变址寄存器X的内容存储到内存单元中;

例:STX Y ; 将X的内容保存到地址为Y,Y+1的单元中。

STY

说明:将变址寄存器X的内容存储到内存单元中;

例:STY $2000 ; 将Y的内容保存到地址为$2000,$2001的单元中。

TAB

说明:将累加器A的内容传送到累加器B中;

例:LDAA # $55 ; 将立即数$55加载到累加器A中。

TAB ; A传送到B, B的值为$55。

TAP

说明:将累加器A的内容传送到程序状态字CCR中,但X位不会发生从0到1的改变;

TBA

说明:将累加器B的内容传送到累加器A中;

例:TBA ; 将累加器B的内容传送到累加器A中。

TFR

说明:将一寄存器的内容传送到另一寄存器中,操作对CCR无影响,除非目的寄存器是CCR;

例:TFR A, B ; 与TAB等价,但不影响CCR。

TFR X, A ; 将X低八位的内容传送到累加器A中。

TFR A,D ; 将A的内容写入D的低八位中,D的高八位进行符号扩展。

TPA

说明:将程序状态字CCR的内容传送到累加器A中,同TFR CCR, A;

TSX

说明:将堆栈指针SP的内容传送到寄存器X中,同TFR SP, X;

TSY

说明:将堆栈指针SP的内容传送到寄存器Y中,同TFR SP, X;

说明:将寄存器X的内容传送到堆栈指针SP中,同TFR X, SP;

TYS

说明:将寄存器Y的内容传送到堆栈指针SP中,同TFR Y, SP;

EXG

说明:将一寄存器的内容与另一寄存器的内存交换;

例:EXG A, B ; 将A与B的内容交换。

EXG B, X ; 将X低八位的内容传送到累加器B中,把$FF:B 传送到X中。

EXG X, A ; 将$00:A 传送到X中,X的低八位传送到A中。

XGDX

说明:将寄存器D的内容和寄存器X内容交换,同EXG D, X;

XGDY

说明:将寄存器D的内容和寄存器Y内容交换,同EXG D, Y;

SEX

说明:将八位寄存器的内容进行符号扩展后送入十六位寄存器中;

例:SEX A, D ; 若A最高位为1:$FF: A 传送到D中,A值变为$FF。

; 若A最高位为0:$00: A 传送到D中,A值变为$00。

MOVB

说明:将源地址一个字节的内容复制到目的地址;

例:MOVB $2000, X ; 将$2000内存单元的内容传送到X寄存器指向的内存单元。

MOVB $80, 8,Y ; 将$0080内存单元的内容传送到Y+8内存单元中。

MOVW

说明:将源地址一个字的内容复制到目的地址;

例:MOVW #$1234, $1000 ; 将$12放到$1000单元,将$34放到$1001单元。

MOVW 2, X+ , 4, Y+ ; 将X寄存器指向的2B数据传送到Y寄存器指向的2B

; 内存单元中,传输后,X自动加2,Y自动加4。

说明:将A的内容加上B的内容送到累加器A中;

例:ABA ; 将A的内容加上B的内容,结果送到累加器A中。

ABX

说明:将B的内容加上X的内容结果送到X中,操作对CCR无影响;

例:ABX ; 同LEAX B, X 。

ABY

说明:将B的内容加上Y的内容结果送到Y中,操作对CCR无影响;

例:ABX ; 同LEAX B, Y 。

ADDA

说明:将A的内容加上内存单元M的内容结果送到A中,操作对CCR有影响;

例:ADDA X ; 将A的内容加上X单元的内容,结果存在A中。

ADDA [D,X] ; 将A的内容加上X+D内存单元为指针指向的数据,结果存于A中。

ADDB

说明:将B的内容加上内存单元M的内容结果送到B中,操作对CCR有影响;

例:ADDB Y ; 将B的内容加上Y单元的内容,结果存在B中。

ADDB $2000 ; 将B的内容加上内存单元$2000的内容,结果存于B中。

ADDD

说明:将D的内容加上内存单元M处的2B数据送到D中;

例:ADDD X ; 将D的内容加上X内存单元的内容,结果存在D中。

ADDD 2, X+ ; 将D的内容加上内存单元X的内容,结果存于D中,然后X的内容

加2。

ADDD 2, X ; 将D的内容加上X+2内存单元的内容,结果存于D中。

ADCA

说明:将A的内容加上内存单元M的内容再加上进位位C,结果送到A中;

例:ADCA X ; 将A的内容加上X指向的内存单元的内容,再加上进位位C的值,

结果存在A中。

ADCA [D, X] ; 将A的内容加上D+X内存单元为指针指向的内容,再加上进位位C

的值,结果存于A中。

ADCB

说明:将B的内容加上内存单元M的内容再加上进位位C,结果送到B中;

例:ADCB Y ; 将B的内容加上Y指向的内存单元的内容,再加上进位位C的值,

结果存在B中。

ADCB $2000 ; 将B的内容加上内存单元$2000的内容,再加上进位位C的值,结

果存于B中。

SBA

说明:将A的内容加上B的内容送到累加器A中;

例:ABA ; 将A的内容减去B的内容,结果送到累加器A中。

SUBA

说明:将A的内容减去内存单元M的内容结果送到A中;

例:SUBA 2, X+ ; 将A的内容减去X单元的内容,结果存在A中,X加2 。

SUBA X ; 将A的内容减去X内存单元的内容,结果存于A中。

SUBB

说明:将B的内容减去内存单元M的内容结果送到B中;

例:SUBB #230 ; 将B的内容减去230,结果存在B中。

SUBB X ; 将B的内容减去X内存单元的内容,结果存于B中。

SUBD

说明:将B的内容减去内存单元M的2B数据,结果送到累加器D中;

例:SUBD $#100 ; 将D的内容减去$100,结果存在D中。

SUBD 5, X ; 将D的内容减去X+5指向的内存单元的2B数据,结果存于D中。

SBCA

说明:将A的内容减去内存单元M的内容再减去借位位C得值,结果送到A中;

例:SBCA $1000 ; 将A的内容减去地址单元$1000的数据,再减去借位位C的值,

结果存在A中。

SBCA 1, X+ ; 将A的内容减去X指向的数据单元的内容,再减去借位位C的值,

结果存于A中,然后X加1。

SBCB

说明:将B的内容减去内存单元M的内容再减去借位位C的值,结果送到B中;

例:SBCB Y ; 将B的内容减去Y指向的数据单元的内容,再减去借位位C的值,

结果存在B中。

SBCB 1, +X ; X先自加1存于X中,再将B的内容减去X指向的数据单元的内

容,再减去借位位C的值,结果存于B中。

DAA

说明:二-十进制调整指令,在ABA,ADD,ADC指令后使用,若相加后A的低四位大于9或半进位位H=1,则加$06修正;若相加后A的高四位大于9或进位位C=1,则加

$60修正;若两者都符合,加$66修正,且重置进位位C;

例:LDAA #$55 ;

ADDA #$38 ; A=$55+$38= $8D

DAA ; 加$06修正,结果为$93 。

INC

说明:加一指令,将M单元的内容加一;

例:INC $1000 ; 将$1000地址单元的数据加一。

INCA

说明:将A的内容加一;

例:INCA ; 将累加器A的内容加一。

INCB

说明:将B的内容加一;

例:INCB ; 将累加器B的内容加一。

INS

说明:将SP的内容加一,操作对CCR无影响;

例:INS ; 将SP的内容加一,同LEAS 1, SP。

INX

说明:将X的内容加一,该指令与LEAX 1,X都是将X的值加一,但LEAX指令不影响Z标志位;

例:INX ; 将变址寄存器X的内容加一。

INY

说明:将Y的内容加一,该指令与LEAY 1,Y都是将Y的值加一,但LEAY指令不影响

Z标志位;

例:INY ; 将变址寄存器Y的内容加一。

DEC

说明:减一指令,将M单元的内容减一;

例:DEC $1000 ; 将$1000地址单元的数据减一。

DECA

说明:将A的内容减一;

例:DECA ; 将累加器A的内容减一。

DECB

说明:将B的内容减一;

例:DECB ; 将累加器B的内容减一。

DES

说明:将SP的内容减一,操作对CCR无影响;

例:DES ; 将SP的内容减一,同LEAS -1,SP 等价。

DEX

说明:将X的内容减一;

例:DEX ; 将X的内容减一,同LEAX -1,X 等价, 但LEAX指令不影响Z标志位。

DEY

说明:将Y的内容减一;

例:DEY ; 将Y的内容减一,同LEAY -1,Y 等价, 但LEAY指令不影响Z标志位。

CBA

说明:将A的内容减去B的内容,结果不返回,操作影响CCR;

例:CBA ; 比较A和B。

CMPA

说明:将A的内容减去M的内容,结果不返回,操作影响CCR;

例:CMPA #$30 ; 将A的内容与$30比较。

CMPA X ; 将A的内容与X指向的数据单元的内容比较。

CMPB

说明:将B的内容减去M的内容,结果不返回,操作影响CCR;

例:CMPB 1,-X ; 先把X减一赋值回X,再将B的内容与X单元的数据比较。

CMPB X ; 将B的内容与X指向的数据单元的内容比较。

CPD

说明:将D的内容减去M单元的2B数据,结果不返回,操作影响CCR;

例:CPD #$1200 ; 将D的内容与$1200比较。

CPD 5,X ; 将D的内容与X+5指向的数据单元的2B内容比较。

CPS

说明:将SP的内容减去M单元的2B数据,结果不返回,操作影响CCR;

例:CPS #$100 ; 将SP的内容与$0100比较。

CPS $100 ; 将SP的内容与$100,$101单元的一个字的内容比较。

CPX

说明:将X的内容减去M单元的2B数据,结果不返回,操作影响CCR;

例:CPX $20 ; 将X的内容与$20,$21单元的一个字的内容比较。

CPX A, X ; 将X的内容与X+A指向的数据单元的2B内容比较。

CPY

说明:将Y的内容减去M单元的2B数据,结果不返回,操作影响CCR;

例:CPY D, Y ; 将Y的内容与Y+D单元的2B内容比较。

CPY [D, Y] ; 将Y的内容与以Y+D单元的数据为指针指向的2B内容比较。

TST

说明:将M单元的1B数据减去$00,结果不返回,操作影响CCR;

例:TST $1000 ; 将$1000单元的内容与0比较。

TST 5,X ; 将X+5指向的数据单元的内容与0比较。

TSTA

说明:将A减去$00,结果不返回,操作影响CCR;

例:TSTA ; 判断A的内容是否为0。

TSTB

说明:将B减去$00,结果不返回,操作影响CCR;

例:TSTB ; 判断B的内容是否为0。

ANDA

说明:将M的内容与A相与,结果送到A中,操作影响CCR;

例:ANDA #$00 ; 将A的内容清0。

ANDB

说明:将M的内容与B相与,结果送到B中,操作影响CCR;

例:ANDB $2000 ; 将B与$2000地址的内容相与。

ANDCC

说明:将M的内容与CCR相与,结果送到CCR中,操作影响CCR;例:ANDCC #$00 ; 将CCR清0。

EORA

说明:将M的内容与A相异或,结果送到A中,操作影响CCR;例:EORA $80 ; 将A与$80地址的内容相异或。

EORB

说明:将M的内容与B相异或,结果送到B中,操作影响CCR;例:EORB X ; 将B与X地址的内容相异或。

ORAA

说明:将M的内容与A相或,结果送到A中,操作影响CCR;

例:ORAA $80 ; 将A与$80地址的内容按位做或运算。

说明:将M的内容与B相或,结果送到B中,操作影响CCR;

例:ORAB $80 ; 将B与$80地址的内容按位做或运算。

ORCC

说明:将M的内容与CCR相或,结果送到CCR中,,除X位不能被软件置1;例:ORCC $80 ; 将CCR与$80地址的内容按位做或运算(X位不变)。

CLC

说明:将进位位C清0,同ANDCC #$FE;

例:CLC ; 将进位位C清0。

CLI

说明:将中断屏蔽位I清0,同ANDCC #$EF;

例:CLI ; 将中断屏蔽位I清0。

CLV

说明:将溢出标志位V清0,同ANDCC #$FD;

例:CLV ; 将溢出标志位V清0。

CLR

说明:将溢M地址的内容清0,操作影响CCR;

例:CLR $80 ; 将$80地址的内容清0。

CLRA

说明:将A的内容清0,操作影响CCR;

例:CLRA ; 将累加器A的内容清0。

CLRB

说明:将B的内容清0,操作影响CCR;

例:CLRB ; 将累加器B的内容清0。

说明:将$FF-M的值放回M处,即对M求补,操作影响CCR;

例:COM $80 ; 将$80地址的内容求补。

COMA

说明:将$FF-A的值放回A处,即对A求补,操作影响CCR;

例:COMA ; 将A的内容求补,结果放回A处。

COMB

说明:将$FF-B的值放回B处,即对B求补,操作影响CCR;

例:COMB ; 将B的内容求补,结果放回B处。

NEG

说明:将0-M的值放回M处,即对M按位取反,操作影响CCR;

例:NEG $80 ; 将$80的内容取反加一。

NEGA

说明:将0-A的值放回A处,即对A按位取反,操作影响CCR;

例:NEGA ; 将A的内容取反加一。

NEGB

说明:将0-B的值放回B处,即对B按位取反,操作影响CCR;

例:NEGB ; 将B的内容取反加一。

EMUL

说明:无符号16位乘法,乘数和被乘数放在D, Y中,结果存在Y, D中,Y中为高16位,D为低16位,操作影响CCR;

例:LDD #300 ; 乘数为300。

LDY #500 ; 被乘数为500。

EMUL ; 结果存于Y: D中,为$2000:$49F0 , 即十进制150000。

EMULS

说明:有符号16位乘法,乘数和被乘数放在D, Y中,结果存在Y, D中,Y中为高16位,D为低16位,操作影响CCR;

例:LDD #300 ; 乘数为300。

LDY #-500 ; 被乘数为500。

EMULS ; 结果存于Y: D中,为$FFFD:$B610 , 即十进制-150000。

MUL

说明:无符号8位乘法,乘数和被乘数放在A, B中,结果存在A, B中,A中为高16位,B为低16位,操作影响CCR;

例:LDAA #125 ; 乘数为125。

LDAB #80 ; 被乘数为80。

MUL ; 结果存于A: B中,为$27:$10 , 即十进制10000。

EDIV

说明:无符号32位除以无符号16位除法,被除数放在Y: D中,除数放在X中,商放在Y中,D中为余数,操作影响CCR;

例:LDD #0 ;

LDY #125 ; 被除数为$007D0000 (8192000)。

LDX #801 ; 除数$0321 (801)。

EDIV ; 结果为$27F3(10227)存于Y中,余数为$00AD(173)存于D中。

EDIVS

说明:有符号32位除以有符号16位除法,被除数放在Y: D中,除数放在X中,商放在Y中,D中为余数,商和余数均为有符号数,操作影响CCR;

例:LDD #0 ;

LDY #-125 ; 被除数为$007D0000 (-8192000)。

LDX #801 ; 除数$0321 (801)。

EDIVS ; 结果为$D80D(-10227)存于Y中,余数为$FF53(-173)存于D中。

FDIV

说明:该指令是小数除法指令,有符号16位除以有符号16位除法,实际上就是求真分数D/X的值,被除数放在D中,除数放在X中,运算结果放在X中,余数放在D中,

商是一个二进制小数,小数点在X的bit的左边,操作影响CCR;

例:LDD #3 ; 分子是3

LDX #8 ; 分母是8,相当于3/8。

FDIV ; 结果存于X中,为$6000,相当于$0.6000 =0.375,余数为0在D中。

IDIV

说明:该指令是无符号整数除法指令,无符号16位除以无符号16位除法,被除数放在D

中,除数放在X中,运算结果商放在X中,余数放在D中,当发生除零计算式,C位被置一,商X的值为$FFFF,余数D中的值不定,操作影响CCR;

例:LDD #$01F4 ; 被除数是$01F4(500)

LDX #$0017 ; 除数是$0017(23)。

IDIV ; 结果存于X中,为$0015(21),余数为$0011(17)在D中。

IDIVS

说明:该指令是有符号整数除法指令,有符号16位除以有符号16位除法,被除数放在D 中,除数放在X中,运算结果商放在X中,余数放在D中,当发生除零计算式,C位被置1,X, D的值不定,操作影响CCR;

例:LDD #$FCE0 ; 被除数是$FCE0(-800)

LDX #$001E ; 除数是$001E(30)。

IDIVS ; 结果存于X中,为$FFE6(-26),余数为$FFEC(-20)在D中。

EMACS

说明:乘加指令,该指令能完成扩展有符号数乘法并进行累加运算,源操作数和结果都存于内存中,结果是32位有符号数,源操作数隐含使用X, Y寄存器寻址。该指令先

将X, Y指向的16为有符号数进行乘法运算,得到32位有符号数,再把这个中间

结果加到32位的结果单元中,操作影响CCR;

例:ORG $2000

SRC1:FDB $01,$02,$03,$04,$05,$06,$07,#08 ; 第一组乘数

SRC2:FDB $11,$12,$13,$14,$15,$16,$17,#18 ; 第二组乘数

DEST:RMB 4 ; 存放结果

ORG $4000

LDX #DEST ; X指向结果单元。

MOVW #0,2,X+ ; 结果单元高位字清零。

MOVW #0, X ; 结果单元低位字清零。

LDX #SRC1 ; X指向第一组操作数。

LDY #SRC2 ; Y指向第二组操作数。

LDAB #8 ; 循环计数器,共八对数据。

LOOP1:EMACS DEST; 乘积并累加到DEST单元。

BVS ERR ; 检查溢出,是则转到ERR处进行处理。

LEAX 2, X ; X指向下一个操作数。

LEAY 2, Y ; Y指向下一个操作数。

DBNE B LPPO1; 未完则转到LOOP1处继续执行。

ANDCC #$FE ; 清除溢出位,表示正常结束无溢出。

RTS ; 结束返回。

ERR:ORCC #$01 ; 将溢出位置位,表示溢出。

RTS ; 溢出返回。

运算结束后,DEST开始的内存单元为$0000030C 。

BITA

说明:将A的内容与内存单元M的内容做与操作,只改变相应的CCR标志;

例:BITA #$80; 测试A的最高位知否为0。

BITB

说明:将B的内容与内存单元M的内容做与操作,只改变相应的CCR标志;

例:BITB #$80; 测试B的最高位知否为0。

BLCR

说明:将立即数取反后与内存单元M的内容做与操作,将操作结果会送到内存单元中,即将内存单元与立即数中1的位相对应的位清0,操作对CCR有影响;

例:BLCR $2000,#$81; 将$2000地址的最高位和最低位清0。

BSET

说明:将立即数与内存单元M的内容做或操作,将操作结果会送到内存单元中,即将内存单元与立即数中1的位相对应的位置1,操作对CCR有影响;

例:BSET $55,#$80; 将$55地址的单元的最高位置1。

LSL, LSLA, LSLB, LSLD

说明:逻辑左移指令,将内存字节,A,B,或D的内容向左移动一位,最低位补0,最高位进入进位位C。操作对CCR有影响;

例:LSL $8000; 将$8000地址的内容左移一位,最高位进入C,最低位补0。

LSLA ; 将累加器A的内容左移一位,最高位进入C,最低位补0。

LSLB ; 将累加器B的内容左移一位,最高位进入C,最低位补0。

LSLD ; 将累加器D的内容左移一位,最高位进入C,最低位补0。

LSR, LSRA, LSRB, LSRD

说明:逻辑右移指令,将内存字节,A,B,或D的内容向右移动一位,最高位补0,最低位进入进位位C。操作对CCR有影响;

例:LSR X; 将X指向的地址的内容右移一位,最低位进入C,最高位补0。

LSRA ; 将累加器A的内容右移一位,最低位进入C,最高位补0。

LSRB ; 将累加器B的内容右移一位,最低位进入C,最高位补0。

LSRD ; 将累加器D的内容右移一位,最低位进入C,最高位补0。

ASL, ASLA, ASLB, ASLD

说明:算术左移指令,将内存字节,A,B,或D的内容向左移动一位,最低位补0,最高位进入进位位C。操作对CCR有影响;

例:ASL 2,X; 将X的内容加2指向的地址的内容左移一位,即乘2,最高位进入

C, 最低位补0。

ASLA ; 将累加器A的内容左移一位,最高位进入C,最低位补0。

ASLB ; 将累加器B的内容左移一位,最高位进入C,最低位补0。

ASLD ; 将累加器D的内容左移一位,最高位进入C,最低位补0。

ASR, ASRA, ASRB

说明:算术右移指令,将内存字节,A或B的内容向右移动一位,最高位保持不变,最低位进入进位位C。操作对CCR有影响;

例:ASR X; 将X指向的地址的内容右移一位,最低位进入C,最高位不变。

LSRA ; 将累加器A的内容右移一位,最低位进入C,最高位不变。

LSRB ; 将累加器B的内容右移一位,最低位进入C,最高位不变。

ROL, ROLA, ROLB

说明:循环左移指令,将内存字节,A或B的内容连标志位C循环向左移动一位,C进入最低位,最高位进入C。操作对CCR有影响;

例:ROL 2,X ; 将X的内容加2指向的地址的内容连同进位位C循环左移一位,C ; 进入最低位,最高位进入C。

ROLA ; 将累加器A的内容连同进位位C循环左移一位,C进入最低位,最高位; 进入C。

ROLB ; 将累加器B的内容连同进位位C循环左移一位,C进入最低位,最高位; 进入C。

ROR, RORA, RORB

说明:循环右移指令,将内存字节,A或B的内容连标志位C循环向右移动一位,C进入最高位,最低位进入C。操作对CCR有影响;

例:ROR 2,X +; 将X的内容加2指向的地址的内容连同进位位C循环右移一位,C ; 进入最高位,最低位进入C,完成后X的内容加2。

RORA ; 将累加器A的内容连同进位位C循环右移一位,C进入最高位,最低位; 进入C。

RORB ; 将累加器B的内容连同进位位C循环右移一位,C进入最高位,最低位; 进入C。

循环移位指令配合算术或逻辑移位指令可以实现多字节移位操作,但要注意右移时先要从高字节开始,左移时先要从低字节开始。

例:将$4000开始的一个8字节实现快速除2操作。

LDX #$4000 ; X指向高字节地址。

飞思卡尔智能汽车设计技术报告

第九届“飞思卡尔”杯全国大学生 智能汽车竞赛 技术报告 学校:武汉科技大学队 伍名称:首安二队参赛 队员:韦天 肖杨吴光星带队 教师:章政 0敏

I

关于技术报告和研究论文使用授权的说明 本人完全了解第九届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日期:

II

目录 第一章引言 (1) 1.1 概述 (1) 1.2 内容分布 (1) 第二章系统总体设计 (2) 2.1 设计概述 (3) 2.2 控制芯片的选择 (3) 2.3 线性 CCD 检测的基本原理 (3) 2.3 系统结极 (5) 第三章机械系统设计 (7) 3.1 底盘加固 (7) 3.2 轮胎处理 (7) 3.3 四轮定位 (8) 3.4 差速器的调整 (12) 3.5 舵机的安装 (13) 3.6 保护杆的安装 (15) 3.7 CCD的安装 (16) 3.8 编码器的安装 (17) 3.9 检测起跑线光电管及加速度计陀螺仪的安装 (18) 第四章硬件系统设计 (19) 4.1 最小系统版 (20) 4.2 电源模块 (21) 4.3 CCD模块 (22) 4.4 驱动桥模块 (23) 4.5 车身姿态检测模块 (24) 4.7 测速模块 (24) 4.8 OLED液晶屏及按键、拨码 (25) 第5章程序设计 (27)

飞思卡尔锁相环

备战飞思卡尔智能车大赛.开始模块总结. 锁相环设置. 公式: PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1), fbus=PLLCLK/2 void INIT_PLL(void) { CLKSEL &= 0x7f; //选用外部时钟.准备设置锁相环 PLLCTL &= 0x8F; //禁止锁相环 SYNR = 0xc9; //设置SYNR REFDV = 0x81; //设置REFDV PLLCTL |=0x70; //锁相环使能 asm NOP; asm NOP; //两个机器周期缓冲时间 while(!(CRGFLG&0x08)); //等待锁相环锁定 CLKSEL |= 0x80; //设置锁相环为时钟源 } 飞思卡尔XS128的PLL锁相环详细设置说明——关于如何提高总线工作频率PLL锁相环就相当于超频 单片机超频的原因和PC机是个一道理。分频的主要原因是外设需要的工作频率往往远低于CPU/MEMORY 这也和PC机南北桥的原理类似。总线频率设置过程 1、禁止总中断 2、寄存器CLKSEL(时钟选择寄存器)的第七位置0 即CLKSEL_PLLSEL=0。选择时钟源为外部晶振OSCCLK(外接晶振频率) 在PLL(锁相环)程序执行前 内部总线频率为OSCCLK/2 3. PLLCTL_PLLON=1 打开PLL 4.设置SYNR 时钟合成寄存器 、REFDV 时钟分频寄存器 、POSTDIV三个寄存器的参数 5、_asm(nop) _asm(nop);加入两条空指令 使锁相环稳定 6、while(!(CRGFLG_LOCK==1));//时钟校正同步 7、CLKSEL_PLLSEL=1; 下面详细说一下频率的计算一、时钟合成寄存器SYNR寄存器结构 VCOFRQ[1:0]控制压控振动器VCO的增益 默认值为00 VCO的频率与VCOFRQ[1:0]对应表

飞思卡尔单片机编程

关于Codewarrior 中的 .prm 文件 网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。有什么错误请指正。 正文: 关于Codewarrior 中的.prm 文件 要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。 通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。一个标准的基于XS128的.prm文件起始内容如下: .prm文件范例: NAMES END SEGMENTS RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF; ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF; //OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF; EEPROM_00 = READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000BFF; EEPROM_01 = READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010BFF; EEPROM_02 = READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO 0x020BFF; EEPROM_03 = READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO 0x030BFF; EEPROM_04 = READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO 0x040BFF; EEPROM_05 = READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO 0x050BFF; EEPROM_06 = READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO 0x060BFF; EEPROM_07 = READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO 0x070BFF; PAGE_F8 = READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BFFF;

基于嵌入式STM32的飞思卡尔智能车设计



飞思卡尔智能车大赛是面向全国大学生举办的应用型比赛, 旨在培养创新精 神、协作精神,提高工程实践能力的科技活动。大赛主要是要求小车自主循迹并 在最短时间内走完整个赛道。针对小车所安装传感器的不同,大赛分为光电组、 电磁组和摄像头组。 本文介绍了本院自动化系第一届大学生智能汽车竟赛的智能车系统。 包括总 体方案设计、机械结构设计、硬件电路设计、软件设计以及系统的调试与分析。 机械结构设计部分主要介绍了对车模的改进,以及舵机随动系统的机械结构。硬 件电路设计部分主要介绍了智能车系统的硬件电路设计, 包括原理图和 PCB 设计 智能车系统的软、 硬件结构及其开发流程。该智能车车模采用学校统一提供的飞 思卡尔车模,系统以 STM32F103C8T6 作为整个系统信息处理和控制命令的核心, 使用激光传感器检测道路信息使小车实现自主循迹的功能
关键字:飞思卡尔智能车STM32F103C8T6
激光传感器
第一章 概述

1.1 专业课程设计题目
基于嵌入式 STM32 的飞思卡尔智能车设计
1.2 专业课程设计的目的与内容
1.2.1 目的 让学生运用所学的计算机、传感器、电子电路、自动控制等知识,在老师的 指导下,结合飞思卡尔智能车的设计独立地开展自动化专业的综合设计与实验, 锻炼学生对实际问题的分析和解决能力,提高工程意识,为以后的毕业设计和今 后从事相关工作打下一定的基础。 1.2.2 内容 本次智能车大赛分为光电组和创新做,我们选择光电组小车完成循迹功能。 该智能车车模采用学校统一提供的飞思卡尔车模, 系统以 STM32F103C8T6 作为整 个系统信息处理和控制命令的核心,我们对系统进行了创造性的优化: 其一, 硬件上采用激光传感器的方案, 软件上采用 keil 开发环境进行调试、 算法、弯道预判。 其二,传感器可以随动跟线,提高了检测范围。 其三,独立设计了控制电路板,充分利用 STM32 单片机现有模块进行编程, 同时拨码开关、状态指示灯等方便了算法调试。
1.3 方案的研讨与制定
1.3.1传感器选择方案 方案一:选用红外管作为赛道信息采集传感器。 由于识别赛道主要是识别黑白两种不同的颜色, 而红外对管恰好就能实现区 分黑白的功能,当红外光照在白色KT板上时,由于赛道的漫反射作用,使得一部 分红外光能反射回来, 让接收管接的输出引脚的电压发生变化,通过采集这个电 压的变化情况来区分红外光点的位置情况,以达到区分赛道与底板的作用。 红外管的优点在于价格便宜,耐用;缺点却用很多:1、红外光线在自然环 境中,无论是室内还是室外均比较常见,就使得其抗干扰能力不强,容易受环境 变化的影响。2、调试不方面,由于红外光是不可见光,调试的时候需要采用比 较麻烦的方法来判断光电的位置。3、由于红外管光线的直线性不好,就使得红 外传感器所能准确的判断的最远距离比较小,也就是通常所说的前瞻不够远。

飞思卡尔单片机LED控制例程详解

我的第一个LED程序 准备工作: 硬件:Freescale MC9S08JM60型单片机一块; 软件:集成开发环境codewarrior IDE; 开发板上有两个LED灯,如下图所示: 实验步骤: 1.首先,确保单片机集成开发环境及USBDM驱动正确安装。其中USBDM的安装步骤如下:?假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE; ?运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下: 1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件 USBDM_JMxxCLD_V4.sx是下载器的固件文件; 2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动 所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动 安装位置到以上目录即可。 ?运行USBDM_4_7_0i_Win之后,还会在目录: C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。

2.新建一个工程,工程建立过程如下: ?运行单片机集成开发环境codewarrior IDE ?出现如下界面 ●Create New Project :创建一个新项目工程 ●Load Example Project :加载一个示例工程 ●Load Previous Project :加载以前创建过的工程 ●Run Getting started Tutorial:运行CodeWarrior软件帮助文档 ●Start Using CodeWarrior:立刻使用CodeWarrior ?点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面 如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口

飞思卡尔智能车电机资料

3.1.6驱动电机介绍 驱动电机采用直流伺服电机,我们在此选用的是RS-380SH型号的伺服电机,这是因为直流伺服电机具有优良的速度控制性能,它输出较大的转矩,直接拖动负载运行,同时它又受控制信号的直接控制进行转速调节。在很多方面有优越性,具体来说,它具有以下优点: (1)具有较大的转矩,以克服传动装置的摩擦转矩和负载转矩。 (2)调速范围宽,高精度,机械特性及调节特性线性好,且运行速度平稳。 (3)具有快速响应能力,可以适应复杂的速度变化。 (4)电机的负载特性硬,有较大的过载能力,确保运行速度不受负载冲击的 影响。 (5)可以长时间地处于停转状态而不会烧毁电机,一般电机不能长时间运行于 停转状态,电机长时间停转时,稳定温升不超过允许值时输出的最大堵转转矩称为连续堵转转矩,相应的电枢电流为连续堵转电流。 图3.1为该伺服电机的结构图。图3.2是此伺服电机的性能曲线。 图3.1 伺服电机的结构图

图3.2 伺服电机的性能曲线 3.1.7 舵机介绍 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求如图3.3所示。图3.4为舵机的控制线。

飞思卡尔--智能车舵机讲解

飞思卡尔--智能车舵机讲解

2.2 舵机的安装 完成了玩具车的拆卸之后要做的第二步就是安装舵机,现在市场上卖的玩具车虽然也具有转向 功能,但是前轮的转向多是依靠直流电机来驱动,无论向哪个方向转都是一下打到底,无法控制转 过固定的角度,因此根据我们的设计需求,需要将原有的转向部分替换成现有的舵机,以实现固定 转角的转向。舵机的实物图如图 2.1所示。 需要说明的是由于小车系玩具车改装,在安装舵机是需要合理的利用小车的结构,将舵机安装 牢固,同时还需注意合理利用购买舵机是附赠的齿轮,从而将舵机固定在合适的位置。舵机的安装 方式有俯式、卧式多种,不同的安装方法力臂长短、响应速度都有所不同,这一点请自己根据实际 情况合理选择,图 2.2 为舵机的安装图。 5

图 2.1 舵机实物图图 2.2 舵机安装图 舵机安装过程中有一点需要尤其注意,由于舵机不是360°可转的,因此必须保证车轮左右转 的极限在舵机的转角范围之内。 舵机安装完毕之后就可以对小车的转角进行控制了,但是由于玩具车的车体设计往往限制了小 车的转角,因此可以对小车进行局部的“破坏”来增大前轮的转角,要知道在比赛中追求速度的同 时一个大的转角对小车的可控性会有一个很大的提升,如图2.3 所示,就是对增加小车转角的一个 改造,这是我在去年小车比赛中的用法。将阻碍前轮转角的一部分用烙铁直接烫掉。 但是这种做法也有风险,由于你的改造会破坏小车的整体 7

结构,有可能会对小车的硬件结构造 成破坏,因此如果你的小车在改造之后显得过于脆弱的话那你就要对你的小车采取些加固措施了。 3.4 舵机转向模块设计 舵机是小车转向的控制机构,具有体积小、力矩大、外部机械设计简单、稳定性高等特 点,无论是在硬件还是软件舵机设计是小车控制部分的重要组成部分,舵机的主要工作流程 为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。图 3.11 为舵机的实物图。 7

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

飞思卡尔智能车竞赛光电组技术报告

第九届“飞思卡尔”杯全国大学生智能车竞赛光电组技术报告 学校:中北大学 伍名称:ARES 赛队员:贺彦兴 王志强 雷鸿 队教师:闫晓燕甄国涌

关于技术报告和研究论文使用授权的说明书本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日期:2014-09-15日

摘要 本文介绍了第九届“飞思卡尔杯全国大学生智能车大赛光电组中北大学参赛队伍整个系统核心采用飞思卡尔单片机MC9S12XS128MAA ,利用TSL1401线性CCD 对赛道的行扫描采集信息来引导智能小车的前进方向。机械系统设计包括前轮定位、方向转角调整,重心设计器件布局设计等。硬件系统设计包括线性CCD传感器安装调整,电机驱动电路,电源管理等模块的设计。软件上以经典的PID算法为主,辅以小规Bang-Bang 算法来控制智能车的转向和速度。在智能车系统设计开发过程中使用Altium Designer设计制作pcb电路板,CodeWarriorIDE作为软件开发平台,Nokia5110屏用来显示各实时参数信息并利用蓝牙通信模块和串口模块辅 助调试。关键字:智能车摄像头控制器算法。

目录 1绪论 (1) 1.1 竞赛背景 (1) 1.2国内外智能车辆发展状况 (1) 1.3 智能车大赛简介 (2) 1.4 第九届比赛规则简介 (2) 2智能车系统设计总述 (2) 2.1机械系统概述 (3) 2.2硬件系统概述 (5) 2.3软件系统概述 (6) 3智能车机械系统设计 (7) 3.1智能车的整体结构 (7) 3.2前轮定位 (7) 3.3智能车后轮减速齿轮机构调整 (8) 3.4传感器的安装 (8) 4智能车硬件系统设计 (8) 4.1XS128芯片介绍 (8) 4.2传感器板设计 (8) 4.2.1电磁传感器方案选择 (8) 4.2.2电源管理模 (9) 4.2.3电机驱动模块 (10) 4.2.4编码器 (11) 5智能车软件系统设 (11) 5.1程序概述 (11) 5.2采集传感器信息及处理 (11) 5.3计算赛道信息 (13) 5.4转向控制策略 (17) 5.5速度控制策略 (19) 6总结 (19)

飞思卡尔S12系列寄存器和中断讲解

S12的输入/输入端口(I/O口) I/O端口功能 可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。 设置I/O口工作方式的寄存器有: DDR、IO、RDR、PE、IE和PS。 DDR:设定I/O口的数据方向。 IO :设定输出电平的高低。 RDR:选择I/O口的驱动能力。 PE:选择上拉/下拉。 IE:允许或禁止端口中断。 PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。 I/O端口设置 1、A口、B口、E口寄存器 (1)数据方向寄存器DDRA、DDRB、DDRE DDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。 当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。 否则,A口、B口、E口为输出口。当DDRA、DDRB、DDRE的任何一 位置1时,则该位对应的引脚被设置为输出。 例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCR PUCR为8位寄存器,复位后的值为0。当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。 (3)A口、B口、E口降功率驱动控制寄存器RDRIV RDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降 (4)数据寄存器PORTA、PORTB、PORTE PORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。 由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。 先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的: 七个中断优先级 每一个中断源都有一个可以设置的级别 高优先级中断的可以嵌套低优先级中断 复位后可屏蔽中断默认优先级为1 同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应 注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断 下面直接进入正题,看看怎么设置中断优先级: XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。 分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中 这些中断的位7到位3都为D,他们就被分成了一组。0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器: 我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。 设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为 这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。对应规则是这样的:中断地址的低四位除以2 比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了 拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。因此中断优先级要SCI0>PORTH>PIT0。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70;

飞思卡尔智能车比赛个人经验总结

先静下心来看几篇技术报告,可以是几个人一起看,边看边讨论,大致了解智能车制作的过程及所要完成的任务。 看完报告之后,对智能车也有了大概的了解,其实总结起来,要完成的任务也很简单,即输入模块——控制——输出。 (1)输入模块:各种传感器(光电,电磁,摄像头),原理不同,但功能都一样,都是用来采集赛道的信息。这里面就包含各种传感器的原理,选用,传感器电路的连接,还有传感器的安装、传感器的抗干扰等等需要大家去解决的问题。 (2)控制模块:传感器得到了我们想要的信息,进行相应的AD转换后,就把它输入到单片机中,单片机负责对信息的处理,如除噪,筛选合适的点等等,然后对不同的赛道信息做出相应的控制,这也是智能车制作过程中最为艰难的过程,要想出一个可行而又高效的算法,确实不是一件容易的事。这里面就涉及到单片机的知识、C语言知识和一定的控制算法,有时为了更直观地动态控制,还得加入串口发送和接收程序等等。 (3)输出模块:好的算法,只有通过实验证明才能算是真正的好算法。经过分析控制,单片机做出了相应的判断,就得把控制信号输出给电机(控制速度)和舵机(控制方向),所以就得对电机和舵机模块进行学习和掌握,还有实现精确有效地控制,又得加入闭环控制,PID算法。 明确了任务后,也有了较为清晰的控制思路,接下来就着手弄懂每一个模块。虽然看似简单,但实现起来非常得不容易,这里面要求掌握电路的知识,基本的机械硬件结构知识和单片机、编程等计算机知识。最最困难的是,在做的过程中会遇到很多想得到以及想不到的事情发生,一定得细心地发现问题,并想办法解决这些问题。 兴趣是首要的,除此之外,一定要花充足的时间和精力在上面,毕竟,有付出就会有收获,最后要明确分工和规划好进度。

飞思卡尔智能车设计报告

飞思卡尔智能车设计报告

目录 1.摘要 (3) 2.关键字 (3) 3.系统整体功能模块 (3) 4.电源模块设计 (4) 5.驱动电路设计 (4) 6.干簧管设计 (5) 7.传感器模块设计 (6) 8.传感器布局 (6) 9.软件设计 (7) 9.1控制算法 (7) 9.2软件系统实现(流程图) (10) 10.总结 (11) 11.参考文献 (12)

1.摘要 “飞思卡尔”杯全国大学生智能汽车竞赛是由教育部高等自动化专业教学指导分委员会主办的一项以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。该竞赛以汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科的科技创意性比赛。 本文介绍了飞思卡尔电磁组智能车系统。本智能车系统是以飞思卡尔32 位单片机K60为核心,用电感检测赛道导线激发的电磁信号, AD 采样获得当前传感器在赛道上的位置信息,通过控制舵机来改变车的转向,用增量式PID进行电机控制,用编码器来检测小车的速度,共同完成智能车的控制。 2.关键字 电磁、k60、AD、PID、电机、舵机 3.系统整体功能模块 系统整体功能结构图

4.电源模块设计 电源是一个系统正常工作的基础,电源模块为系统其他各个模块提供所需要的能源保证,因此电源模块的设计至关重要。模型车系统中接受供电的部分包括:传感器模块、单片机模块、电机驱动模块、伺服电机模块等。设计中,除了需要考虑电压范围和电流容量等基本参数外,还要在电源转换效率、噪声、干扰和电路简单等方面进行优化。可靠的电源方案是整个硬件电路稳定可靠运行的基础。 全部硬件电路的电源由7.2V,2A/h的可充电镍镉电池提供。由于电路中的不同电路模块所需要的工作电流容量各不相同,因此电源模块应该包含多个稳压电路,将充电电池电压转换成各个模块所需要的电压。 电源模块由若干相互独立的稳压电源电路组成。在本系统中,除了电机驱动模块的电源是直接取自电池外,其余各模块的工作电压都需要经电源管理芯片来实现。 由于智能车使用7.2V镍镉电池供电,在小车行进过程中电池电压会有所下降,故使用低压差电源管理芯片LM2940。LM2940是一款低压稳压芯片,能提供5V的固定电压输出。LM2940低压差稳压芯片克服了早期稳压芯片的缺点。与其它的稳压芯片一样,LM2940需要外接一个输出电容来保持输出的稳定性。出于稳定性考虑,需要在稳压输出端和地之间接一个47uF低等效电阻的电容器。 舵机的工作电压是6伏,采用的是LM7806。 K60单片机和5110液晶显示器需要3.3伏供电,采用的是LM1117。 5.驱动电路设计 驱动电路采用英飞凌的BTS7960,通态电阻只有16mΩ,驱动电流可达43A,具有过压、过流、过温保护功能,输入PWM频率可达到25KHz,电源电压5.5V--27.5V。BTS7960是半桥驱动,实际使用中要求电机可以正反转,故使用两片接成全桥驱动。如图下图所示。

(毕业设计)飞思卡尔智能车及机器视觉

图像处理在智能车路径识别中的应用 摘要 机器视觉技术在智能车中得到了广泛的应用,这项技术在智能车的路径识别、障碍物判断中起着重要作用。基于此,依据飞思卡尔小车的硬件架构,研究机器视觉技术应用于飞思卡尔小车。飞思卡尔智能车处理器采用了MC9S12XS128芯片,路况采集使用的是数字摄像头OV7620。 由于飞思卡尔智能车是是一款竞速小车,因此图像采集和处理要协调准确性和快速性,需要找到其中的最优控制。因此本设计主要需要完成的任务是:怎样用摄像头准确的采集每一场的图像,然后怎样进行二值化处理;以及怎样对图像进行去噪处理;最后也就是本设计的难点也是设计的核心,怎样对小车的轨迹进行补线。 本设计的先进性,在众多的图像处理技术中找到了适合飞思卡尔智能车的图像处理方法。充分发挥了摄像头的有点。经过小车的实际测试以及相关的MATLAB 仿真,最终相关设计内容都基本满足要求。小车的稳定性和快速性得到显著提高。 关键词:OV7620,视频采集,图像处理,二值化

The Application of Image Processing in the Recognition of Intelligent Vehicle Path ABSTRACT CameraMachine vision technology in the smart car in a wide range of applications, the technology identified in the path of the smart car, and plays an important role in the obstacles to judge. Based on this, based on the architecture of the Freescale car, machine vision technology used in the Freescale car. Freescale smart car the processor MC9S12XS128 chip traffic collected using a digital camera OV7620. Freescale's Smart car is a racing car, so the image acquisition and processing to coordinate the accuracy and fast, you need to find the optimal control. This design need to complete the task: how to use the camera to accurately capture every image, and then how to binarization processing; and how to image denoising; last is the difficulty of this design is the design of the core, how to fill line on the trajectory of the car. The advanced nature of the design found in many image processing techniques of image processing methods for Freescale Smart Car. Give full play to the camera a bit. The actual testing of the car and MATLAB simulation, the final design content can basically meet the requirements. The car's stability and fast to get improved significantly. KEY WORDS:OV7620,Video Capture,PictureProcessing,Binarization

飞思卡尔智能车程序

Main.c #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12db128b" #include "define.h" #include "init.h" // variable used in video process volatile unsigned char image_data[ROW_MAX][LINE_MAX] ; // data array of picture unsigned char black_x[ROW_MAX] ; // 0ne-dimensional array unsigned char row ; // x-position of the array unsigned char line ; // y-position of the array unsigned int row_count ; // row counter unsigned char line_sample ; // used to counter in AD unsigned char row_image ; unsigned char line_temp ; // temperary variable used in data transfer unsigned char sample_data[LINE_MAX] ; // used to save one-dimension array got in interruption // variables below are used in speed measure Unsigned char pulse[5] ; // used to save data in PA process Unsigned char counter; // temporary counter in Speed detect Unsigned char cur_speed; // current speed short stand; short data; unsigned char curve ; // valve used to decide straight or turn short Bounds(short data); short FuzzyLogic(short stand); /*----------------------------------------------------------------------------*\ receive_sci \*----------------------------------------------------------------------------*/ unsigned char receive_sci(void) // receive data through sci { unsigned char sci_data; while(SCI0SR1_RDRF!=1); sci_data=SCI0DRL; return sci_data; } /*----------------------------------------------------------------------------*\ transmit_sci \*----------------------------------------------------------------------------*/ void transmit_sci(unsigned char transmit_data) // send data through sci { while(SCI0SR1_TC!=1); while(SCI0SR1_TDRE!=1);

飞思卡尔单片机外设模块寄存器翻译

PIT 模块译: 翻译来自MC9S12X128英文原文PDF.P347-P357 PIT 块结构图: PIT0中断向量66, 1->67, 2->68, 3->69 PIT 相关寄存器详解: 1、 PITCFLMT :寄存器基本控制和基本时钟加载控制寄存器(8位) 1:PIT 使能 PITSWAI: 0:等待模式下仍然工作 1:等待模式下不工作 PITFRZ: 0:冻结模式下仍然工作 1:冻结模式下不工作 PFLMT1: 写1强制加载基本定时计数器1,写0无效,读也总为0 PFLMT0: 同PFLMT1 2、 PITFLT :PIT 计数器强制加载定时器寄存器(8位)

PFLT[3:0]写1相对应的16位计数寄存器会立即载入相对应的16位计数加载寄存器(PITLDn)中的值。 3、PITCE:PIT通道使能存器(8位) PCE[3:0]:如果PITE已经使能,对寄存器PCEn写1后,每输入一个时钟相对应的计数寄存器 开始递减,写0无效。 4、PITMUX:PIT基本时钟通道选择寄存器(8位) PMUX[3:0]:对PMUXn写1,则对应定时器通道选择基本时钟1作为输入,写0则选择基本时 钟0为输入。 5、PITINTE:PIT定时中断使能寄存器(8位) PINTE[3:0]:对PINTEn写1,当相对应的计数寄存器和基本计数寄存器归0时,产生中断请求,否则无效。 6、PITTF:PIT时钟输出标志寄存器(8位)

7、PITMTLD0-1:PIT基本时钟计数器预加载寄存器(8位) 会被加载到基本定时器n,无论什么时刻PFLMTn置“1”会立即更新基本定时器寄存器的值. 8、PITLD0–3:PIT0-3计数器预加载寄存器(16位) PITLD0-3的值用来加载到相对应计数器0-3的寄存器中。当相应通道计数器归零时,或PITFLT寄存器中相应的强制加载位置“1”时,PITLDn中的值将会被立即加载到PITCNTn。 9、PITCNT0–3:PIT0-3计数寄存器(16位) 变计数周期。

飞思卡尔智能车竞赛摄像头组——技术报告 精品

"飞思卡尔"杯全国大学生智能汽车竞赛 技术报告

关于技术报告和研究论文使用授权的说明 本人完全了解第八届"飞思卡尔"杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名:孟泽民 章志诚 徐晋鸿 带队教师签名:陈朋 朱威 日期:2013.8.15

摘要 本文设计的智能车系统以MK60N512ZVLQ10微控制器为核心控制单元,通过Ov7620数字摄像头检测赛道信息,使用K60的DMA模块采集图像,采用动态阈值算法对图像进行二值化,提取黑色引导线,用于赛道识别;通过编码器检测模型车的实时速度,使用PID 控制算法调节驱动电机的转速和转向舵机的角度,实现了对模型车运动速度和运动方向的闭环控制。为了提高模型车的速度并让其更稳定,我们使用自主编写的Labview上位机、SD卡模块、无线模块等调试工具,进行了大量硬件与软件测试。实验结果表明,该系统设计方案可行。 关键词:MK60N512VMD100,Ov7620,DMA,PID,Labview,SD卡

Abstract In this paper we will design a smart car system based on MK60N512ZVLQ10 as the micro-controller unit. We use a Ov7620 digital image camera to obtain lane image information. The MCU gets the image by its DMA module. Then convert the original image into the binary image by using dynamic threshold algorithm in order to extract black guide line for track identification. An inferred sensor is used to measure the car`s moving speed. We use PID control method to adjust the rotate speed of driving electromotor and direction of steering electromotor,to achieve the closed-loop control for the speed and direction. To increase the speed of the car and make it more reliable,a great number of the hardware and software tests are carried on and the advantages and disadvantages of the different schemes are compared by using the Labview simulation platform designed by ourselves,the SD card module and the wireless module. The results indicate that our design scheme of the smart car system is feasible. Keywords: MK60N512VMD100,DMA,Ov7620,PID,Labview,SD card

相关文档
相关文档 最新文档