📄 test25.c
字号:
/****************************************
*步进电机的工作:
四相混合式步进电机一般由两相驱动器来驱动,
因此,连接时可以采用串联接法或并联接法将四相电机接成两相使用。
实验内容:
1、两相电机驱动。
正转:AB-BC-CD-DA
反转:AD-DC-CB-BA
2、四相电机驱动
正转:A-B-C-D
反转:D-C-B-A
*****************************************
*/
#pragma CODE_SECTION(vect,"vect")
unsigned int *pmem=0;
unsigned int READ;
unsigned int flag; /*select phase,0:ab;1:bc;2:cd;3:da*/
unsigned int flag1; /*select direction,0:counter clockwise;1:clockwise*/
unsigned int TIMER;
#define PMST *(pmem+0x001D)
#define SWCR *(pmem+0x002B)
#define SWWSR *(pmem+0x0028)
#define READS *(pmem+0x4000)
#define IMR *(pmem+0x0000)
#define IFR *(pmem+0x0001)
#define PRD0 *(pmem+0x0025) /* timer0 period register */
#define TCR0 *(pmem+0x0026) /* timer0 control register */
void cpu_init()
{
PMST=0x3FA0;
SWWSR=0x7fff;
SWCR=0x0000;
IMR=0;
IFR=IFR;
}
void set_t0()
{
asm(" ssbx intm");
TCR0=0x0b1b;
PRD0=0x4e1f;
IMR=IMR|0x0008;
IFR=IFR;
TCR0=0x0b2b;
asm(" rsbx intm");
}
interrupt void tint0()
{
TIMER++;
if(TIMER%50==0)
if(flag<3)
flag=flag+1;
else flag=0;
}
void main(void)
{
flag=0;
flag1=0;
cpu_init();
set_t0();
READS=9; /*两相电机驱动工作方式*/
for(;;)
{
if(flag1==0)
switch(flag)
{
case 0:READS=9;break; /*AB相同时导通*/
case 1:READS=10;break; /*BC相同时导通*/
case 2:READS=6;break; /*CD相同时导通*/
case 3:READS=5;break; /*DA相同时导通*/
}
else
switch(flag)
{
case 0:READS=5;break; /*DA相同时导通*/
case 1:READS=6;break; /*CD相同时导通*/
case 2:READS=10;break; /*BC相同时导通*/
case 3:READS=9;break; /*AB相同时导通*/
}
}
/* READS=1; 四相电机驱动工作方式
for(;;)
{
if(flag1==1)
switch(flag)
{
case 0:READS=1;break;
case 1:READS=8;break;
case 2:READS=2;break;
case 3:READS=4;break;
}
else
switch(flag)
{
case 0:READS=4;break;
case 1:READS=2;break;
case 2:READS=8;break;
case 3:READS=1;break;
}
} */
}
void vect()
{
asm(" .ref _c_int00");
asm(" .ref _tint0");
asm(" b _c_int00"); /* reset */
asm(" nop");
asm(" nop");
asm(" rete"); /* nmi */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int2 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" b _tint0"); /* tint0 */
asm(" nop");
asm(" nop");
asm(" rete"); /* brint0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* bxint0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* dmac0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* tint1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int3 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* hpint */
asm(" nop");
asm(" nop");
asm(" rete"); /* brint1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* bxint1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* dmac4 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* dmac5 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -