ok:dsb 1 ;鼠标状态 ;bit7:存在,bit5,左键,bit4:右键 ; cseg at 2000h dcw init cseg at 200ch dcw sioint dcw init dcw 0 dcb 0,0,0,0,0,0 dcb 08dh dcb 000h dcb 027h,0feh ; cseg at 2080h init:ld sp,#0100h ;设堆栈指针 ld m_x,#scrnw/2;初始化指针 ld m_y,#scrnh/2 andb lrb_ok,#7ch ld m_p,#m_buf clrb int_pend ;清除中断 ldb int_mask,#40h ;开串行中断 ldb al,sp_stat ;清除ri/ti ldb sp_con,#09h ;设串口模式 ldb baud_rt,#9bh ;1200,12mhz ldb baud_rt,#80h ei andb iop2,#0feh ;p2.2=0 ld ax,#8000h ;延迟200ms dly0:dec ax jne dly0 ld
ads7843_w: shlb al, # 1 ; 数据串行发送 jc s_d i_1; jmp s_di_0 s_di_1: ldb bl, ioport1 ; 将p1 口状态保存在bl 寄存器中 orb bl, # 03h ; 将数据出dout置高, 数据入din 为信号输入状态 ldb ioport1, bl ; 将修改后的状态送至p1口 jmp skclk s_di_0: ldb bl, ioport1 ; 将p1 口状态保存在bl 寄存器中 andb bl, # 0feh ; 将数据出dout 置低 orb bl, # 02h ; 数据入d in为信号输入状态 ldb ioport1, bl; 将修改后的状态送至p1口 skclk: ldb bl, ioport1 ; 将p1口状态保存在bl寄存器中 andb bl, # 0f7h ; 时钟信号dclk为低 orb bl, # 01h ; 将数据出dout 置高 ldb ioport1, bl ; 将修改后的状态送至p1口 ldb bl, iopor
设置输出寄存器为普通输出模式 ldb al, #048h stb al, reg-cdr ;使能内部比较器,禁止时钟输出 stb #01h, reg-btr0 ;设置波特率为 250k(使用16m晶振) stb #1ch, reg-btr1 ldb al, #00h stb al, reg-acr ;设置验收码寄存器 ldb al, #0ffh stb al, reg-amr ;设置验收屏蔽码寄存器 ldb al, reg-cr andb al, #0feh ;sja1000退出复位模式 ldb al, #02h stb al, reg-cr ;设置中断寄存器,使能 接收中断 ret 以上程序段可以正确初始化sja1000,为了提高程序可靠性和容错性,实际应用中应该读出sja1000寄存器内容并加以比较,从而判断是否正确写入。 结束语 基于以上所述的软、硬件设计实现了can协议所包括数据链路层和物理层,由于can总线协议没有定义应用层,因此在实际的应用中有必要定义高层通信协议,即相应的命
n,使max504产生所需电压基准信号vout,使之与实际检测电压进行pi计算后产生无刷同步发电机励磁机的励磁控制信号,接口控制软件如下: ldb wsr,#7eh ldb p2_mode,#00h ldb p2_dir,#00h ldb p2_reg,#80h ld data1,#02h ad00:ldb reg1,#16 ld temp,data1 shl temp,#2 ad01:shl temp,#1 andb p2_reg,#00h; jnc zero1 orb p2_reg,#20h;zero1:orb p2_reg,#40h; djnz reg1,ad01; orb p2_reg,#80h sjmp ad00 ret6 结束语 笔者设计的无刷同步发电机励磁控制装置现已应用于df8b型内燃机车的交流辅助传动系统,运行试验证明该控制装置能够满足实际应用要求。 参考文献: [1]. max504 datasheet http://www.dzsc.com/d
lcall dt ;延时1000ns lcall comz1 ;初始化modem,发出at命令:ata lcall dt lcall comz2 ;初始化modem,发出at命令:ate1q0v1l3x4s0=1 lcall dt lcall comz3 ;初始化modem,发出at命令:ats7=30 lcall dt ring0:ldb spcon,#09h ring1:ldb 60h,spstat jbc 60h,6,ring1 andb 60h,#0bfh ldb 70h,subf ;从串口接收一个数据 cmpb 70h,#80h je td ;发送数据程序 ljmp ring1 由于单片机向modem发出at命令程序是相似的,故在此仅为at命令:ate1q0v1l3x4s0=1为例来加以说明。假设at命令存放在以0ab40h为首地址的外部存贮器中。程序如下: comz2:ld72h,#0ab40h ;at命令首地址 ldb 20h,#17 comz2a:ldb 70h,[72h
做数据存储器我用87c196kc扩展了一片at28c256做数据存储器,p3口经373到at28c256的低地址,p4口上at28c256的高地址,373的le接了ale,at28c256的oe和we分别接了单片机的rd和wr,at28c256的ce接了p1.5口,这种接法应该没问题吧。数据写入的时候,oe为高 ce为低 we为低,数据读取的时候,oe为低 ce为低 we为高写了一个下面的程序,先写入,在判断写入的数是否正确,读取的数一直都是ff,不知道怎么回事,大家帮忙看看呀date: andb 0fh,#0dfh ld 22h,#8000hloop: ldb 20h,#00h stb 20h,[22h] cmpb 20h,[22h] jne err ldb 20h,#0ffh stb 20h,[22h] cmpb 20h,[22h]+ jne err cmp 22h,#9000h jne loophere: nop nop sjm