⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom

📁 论文题目:基于数字信号处理器(DSP)的异步电机直接转矩控制研究 其中有软件的设计文档
💻
📖 第 1 页 / 共 2 页
字号:
int1: 
      ldp #100h
      bit flag,14
      bcnd ext_int1,TC ;FLAG[1]=1,转外部INT1
      ldp #0e0h
      lacl SYSIVR 
      sub #0006h
      bcnd receive_error1,NEQ

*注意:进入MAIN_TREAT后,头两个字节为50H和a0H,随后是数据包的长度(如03指令,
*长度为7;15指令,长度为2),然后是指令码(一个字节),然后是起始地址(两个字节)....
*MAIN_TREAT是按上面的规定写的. 有可能要调整.
       clrc SXM ; 进入int1,先抑制符号位扩展
       setc INTM  ;forbid all interrupt
       ldp #0e0h
       splk #0000h,SCICTL2 ;forbid SCI receive interrupt
;      ldp #0h
;      lacl IFR
;      sacl IFR  ; 最好能加上这三句,清除标志位,否则一开总中断马上又进入int1
       ldp #0e0h
first_char:
       bit SCIRXST,9            
       bcnd first_char,NTC
       clrc XF
       lacl SCIRXBUF ;reading SCIRXBUF can clear flag bit!!
       sub #0a0h
       bcnd shake_hand,EQ

       lacl SCIRXBUF  
       sub #50h
       bcnd receive_error1,NEQ ;the first data should be 50H
second_char:
       bit SCIRXST,9
       bcnd second_char,NTC
       setc XF
       lacl SCIRXBUF
       sub #0a0h
       bcnd receive_error1,NEQ
third_char:
       bit SCIRXST,9
       bcnd third_char,NTC
       clrc XF
       lacl SCIRXBUF
       ldp #100h
       sacl temp2 ;keep length of data_package in temp2
       ldp #0e0h
fourth_char:
       bit SCIRXST,9
       bcnd fourth_char,NTC
       setc XF
       lacl SCIRXBUF
       ldp #100h
       sacl temp3 ;keep command_code in temp3
  
            mar *,ar7 
            lar ar7,#8005h ;8005H--temp4           
down_count: ldp #0e0h
receive_data:
            bit SCIRXST,9
            bcnd receive_data,NTC 
            lacl SCIRXBUF              
            sacl *+ ;将第5,6..字节依次存于TEMP4,TEMP5..单元中
            ldp #100h
            lacc temp2
            sub #01h
            sacl temp2
            bcnd down_count,NEQ 
           
*************************
*This is Command_treat ;数据包全部收到,转命令处理
*************************
              ldp #100h              
              lacc temp3;根据TEMP3进行跳转
              sub #03h               
              bcnd deal,EQ
              lacc temp3
              sub #04h
              bcnd deal,EQ
              lacc temp3
              sub #05h
              bcnd deal,EQ
              lacc temp3
              sub #07h
              bcnd deal,EQ
              lacc temp3
              sub #08h
              bcnd deal,EQ
              lacc temp3
              sub #09h
              bcnd deal,EQ
              lacc temp3
              sub #10h
              bcnd trans_file,EQ ;传输文件的命令码是10h 
              lacc temp3
              sub #15h
              bcnd run_program,EQ             
              lacc temp3
              sub #33h
              bcnd condition_reset,EQ
              lacc temp3
              sub #35h
              bcnd no_condition_reset,EQ
	      bcnd receive_error1

*DEAL部分:03,04,05, 07,08,09这六条指令都要确定起始地址和长度,由DEAL完成
deal:         ldp #100h
              lacc temp5 ;取起始地址低八位
              add temp4,8
              sacl temp0 ;起始地址存于TEMP0中
              sacl temp1 ;也存于TEMP1中
              lacc temp7
              add temp6,8 ;得到终止地址
              sub temp0
              sacl temp0 ;TEMP0中为长度
              lacc temp3 
              sub #03h
              bcnd read_PM,EQ 
              lacc temp3
              sub #04h
              bcnd read_DM,EQ 
              lacc temp3
              sub #05h
              bcnd read_IO,EQ
              lacc temp3
              sub #07h
              bcnd write_PM,EQ
              lacc temp3
              sub #08                                        
              bcnd write_DM,EQ
              lacc temp3
              sub #09h
              bcnd write_IO,EQ  

*进入READ_DM时,TEMP0中为长度,TEMP1中为起始地址
read_DM:      ldp #0e0h
              lacc #50h
              sacl SCITXBUF
wait6:        bit SCICTL2,8
              bcnd wait6,NTC                   
              lacc #03h
              sacl SCITXBUF ;发送数据头5003H
wait7:        bit SCICTL2,8
              bcnd wait7,NTC ;这一句必须有,否则03H送不上去         
              ldp #100h
              mar *,ar7
              lar ar7,temp1
*注:要把字分成高八位和低八位传送.
continue1:    lacc * ;取字单元内容(16位)
              sacl temp2 
              lacc *+,8
              sach temp3 ;16位字单元高八位存于TEMP3
              lacc temp3
              and #00ffh
              ldp #0e0h
              sacl SCITXBUF;先送高八位
wait8:        bit SCICTL2,8
              bcnd wait8,NTC
              ldp #100h
              lacc temp2
              sub temp3,8 ;这样ACC中是真正的低八位
              and #00ffh
              ldp #0e0h
              sacl SCITXBUF ;送出的是低八位
wait9:        bit SCICTL2,8
              bcnd wait9,NTC ;这一句必须有
              ldp #100h
              lacc temp0              
              bcnd return1,EQ ;全部送完,跳转
              sub #01h
              sacl temp0
	      b continue1
receive_error1:
	      nop
return1:
	      ldp #0h
	      lacl IFR
;	      or #0001h ;clear IFR[0]
	      sacl IFR
	      ldp #0e8h
	      lacl EVIFRA
	      sacl EVIFRA
	      ldp #0e0h
	      splk #0002h,SCICTL2 ;出去时允许串口接收中断
	      setc sxm ; 出去时允许符号位扩展
              clrc INTM
              ret

shake_hand:   ldp #0e0h
wait_for_1:
              bit SCICTL2,8
              bcnd wait_for_1,NTC
              lacc #50h
              sacl SCITXBUF ;回送第一个数50H
shake_1:
              bit SCIRXST,9
              bcnd shake_1,NTC
              lacl SCIRXBUF
              sub #0aah
              bcnd receive_error1,NEQ 
wait_for_2:
              bit SCICTL2,8
              bcnd wait_for_2,NTC  
              lacc #55h
              sacl SCITXBUF ;回送第二个数55H
shake_2:
              bit SCIRXST,9
              bcnd shake_2,NTC
              lacl SCIRXBUF
              sub #55h
              bcnd receive_error1,NEQ
wait_for_3:
              bit SCICTL2,8
              bcnd wait_for_3,NTC 
              lacc #0aah
              sacl SCITXBUF ;回送第三个数aaH
              b return1               
 
*进入READ_PM时,TEMP0中为长度,TEMP1中为起始地址
read_PM:       clrc INTM
               ret  
                                            
*刚进入TRANS_FILE时,TEMP4,TEMP5中分别是起始地址的高,低八位;temp6,temp7中分别
*是传输总字节数的高,低八位.TEMP8中若为55H,表示传输高八位文件;为40H,表示传输
*低八位文件.
trans_file: 
              ldp #100h
              lacc temp5
              add temp4,8
              sacl temp0 ;TEMP0中是起始地址
              lacc temp7
              add temp6,8
              sacl count ;COUNT中是传输总字节数
              lacc temp8
              sub #55h
              bcnd high_flag_set,EQ
              lacc temp8
              sub #40h
              bcnd low_flag_set,EQ
              clrc INTM
              ret
high_flag_set:
              mar *,ar7
              lar ar7,temp0 ;这样AR7中是起始地址
trans_data_high:
                ldp #0e0h
wait_high:
                bit SCIRXST,9
                bcnd wait_high,NTC
                lacc SCIRXBUF,8
                add * ;加上低八位内容
                sacl *+ ;存储,并指向下一单元.
                ldp #100h
                lacc count
                sub #01h
                sacl count 
                bcnd trans_data_high,NEQ  
                b return1 ;全部传完,转return1
low_flag_set: 
              mar *,ar7
              lar ar7,temp0 ;这样AR7中是起始地址
trans_data_low:
                ldp #0e0h
wait_low:
                bit SCIRXST,9
                bcnd wait_low,NTC
                lacc SCIRXBUF
                sacl *+ ;存储低八位,并指向下一单元.
                ldp #100h
                lacc count
                sub #01h
                sacl count 
                bcnd trans_data_low,NEQ
                b return1 ;全部传完,转return1


write_DM:     clrc INTM
              ret
write_IO:     clrc INTM
              ret
write_PM:     clrc INTM
              ret
*进入RUN_PROGRAM时,TEMP4,TEMP5中分别是起始地址的高,低八位
run_program:  ldp #100h
              lacc temp5
              add temp4,8
              sacl temp0 ;TEMP0中为起始地址
              lacc flag
              OR #02h
              sacl flag ;外部程序运行标志FLAG[1]置1 

              ldp #0h
	      lacl IFR
;	      or #0001h ;clear IFR[0]
	      sacl IFR
	      ldp #0e8h
	      lacl EVIFRA
	      sacl EVIFRA
	      ldp #0e0h
	      splk #0002h,SCICTL2 ;出去时允许串口接收中断
	      setc sxm ; 出去时允许符号位扩展

              ldp #100h
              lacc temp0
              cala ;PC+1-->TOS,ACC(15:0)-->PC
               
condition_reset:clrc INTM
               ret
no_condition_reset:clrc INTM
                ret
read_IO:     clrc INTM
             ret
int2: 
      b ext_int2
int3: 
      b ext_int3
int4: 
      b ext_int4
int5: 
      b ext_int5
int6: 
      b ext_int6

     .end
  



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -